(pid int32, mem *MemoryDetail)
| 272 | } |
| 273 | |
| 274 | func readSmapsRollup(pid int32, mem *MemoryDetail) error { |
| 275 | filePath := fmt.Sprintf("/proc/%d/smaps_rollup", pid) |
| 276 | file, err := os.Open(filePath) |
| 277 | if err != nil { |
| 278 | return err |
| 279 | } |
| 280 | defer file.Close() |
| 281 | |
| 282 | scanner := bufio.NewScanner(file) |
| 283 | |
| 284 | for scanner.Scan() { |
| 285 | line := scanner.Text() |
| 286 | fields := strings.Fields(line) |
| 287 | if len(fields) < 2 { |
| 288 | continue |
| 289 | } |
| 290 | |
| 291 | key := strings.TrimSuffix(fields[0], ":") |
| 292 | value, _ := strconv.ParseUint(fields[1], 10, 64) |
| 293 | value *= 1024 |
| 294 | |
| 295 | switch key { |
| 296 | case "Pss": |
| 297 | mem.PSS = value |
| 298 | case "Private_Clean", "Private_Dirty": |
| 299 | mem.USS += value |
| 300 | case "Shared_Clean", "Shared_Dirty": |
| 301 | if mem.Shared == 0 { |
| 302 | mem.Shared = value |
| 303 | } |
| 304 | } |
| 305 | } |
| 306 | |
| 307 | return scanner.Err() |
| 308 | } |
| 309 | |
| 310 | func readSmaps(pid int32, mem *MemoryDetail) error { |
| 311 | filePath := fmt.Sprintf("/proc/%d/smaps", pid) |
no test coverage detected