Skip to content

Commit 8659e25

Browse files
chore: prioritize reading smaps_rollup if possible
1 parent bdb6df5 commit 8659e25

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

memx.go

+31-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,38 @@ import (
88
"strings"
99
)
1010

11-
// GetMemoryUsage returns the calling process' internal + shared memory usage in kB.
11+
// Faster version. Prioritize in call.
12+
func getMemRollup() (uint64, error) {
13+
f, err := os.Open(fmt.Sprintf("/proc/%d/smaps_rollup", os.Getpid()))
14+
if err != nil {
15+
return 0, err
16+
}
17+
18+
defer f.Close()
19+
r := bufio.NewScanner(f)
20+
for r.Scan() {
21+
line := r.Bytes()
22+
if bytes.HasPrefix(line, []byte("Pss:")) {
23+
var mem uint64
24+
_, err := fmt.Sscanf(string(line[4:]), "%d", &mem)
25+
if err != nil {
26+
return 0, err
27+
}
28+
29+
return mem, nil
30+
}
31+
}
32+
33+
return 0, fmt.Errorf("not found")
34+
}
35+
36+
// GetMemoryUsage returns the calling process' private + shared memory usage in kB.
1237
func GetMemoryUsage() (uint64, error) {
38+
memr, err := getMemRollup()
39+
if err == nil {
40+
return memr, nil
41+
}
42+
1343
f, err := os.Open(fmt.Sprintf("/proc/%d/smaps", os.Getpid()))
1444
if err != nil {
1545
return 0, err

0 commit comments

Comments
 (0)