forked from ALHP/ALHP.GO
better process memory reading error handling
This commit is contained in:
19
utils.go
19
utils.go
@@ -789,9 +789,15 @@ func getProcessMemory(pid int) (int, int, error) {
|
|||||||
|
|
||||||
switch fields[0] {
|
switch fields[0] {
|
||||||
case "VmRSS:":
|
case "VmRSS:":
|
||||||
rss, _ = strconv.Atoi(fields[1])
|
rss, err = strconv.Atoi(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
case "VmSwap:":
|
case "VmSwap:":
|
||||||
swap, _ = strconv.Atoi(fields[1])
|
swap, err = strconv.Atoi(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rss, swap, nil
|
return rss, swap, nil
|
||||||
@@ -819,20 +825,23 @@ func getProcessTreeMemory(pgid int) (int, int, error) {
|
|||||||
|
|
||||||
pid, err := strconv.Atoi(entry.Name())
|
pid, err := strconv.Atoi(entry.Name())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, err
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
statPath := fmt.Sprintf("/proc/%d/stat", pid)
|
statPath := fmt.Sprintf("/proc/%d/stat", pid)
|
||||||
file, err := os.Open(statPath)
|
file, err := os.Open(statPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, err
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(file)
|
scanner := bufio.NewScanner(file)
|
||||||
if scanner.Scan() {
|
if scanner.Scan() {
|
||||||
fields := strings.Fields(scanner.Text())
|
fields := strings.Fields(scanner.Text())
|
||||||
if len(fields) >= 5 {
|
if len(fields) >= 5 {
|
||||||
processPGID, _ := strconv.Atoi(fields[4])
|
processPGID, err := strconv.Atoi(fields[4])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
if processPGID == pgid {
|
if processPGID == pgid {
|
||||||
rss, swap, err := getProcessMemory(pid)
|
rss, swap, err := getProcessMemory(pid)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
Reference in New Issue
Block a user