adds extended memory stats (#21)
This commit is contained in:
parent
55d5027c97
commit
5a49bb8e88
@ -90,7 +90,7 @@ func writeProcessMetrics(w io.Writer) {
|
|||||||
fmt.Fprintf(w, "process_resident_memory_pagecache_bytes %d\n", rssPageCache)
|
fmt.Fprintf(w, "process_resident_memory_pagecache_bytes %d\n", rssPageCache)
|
||||||
fmt.Fprintf(w, "process_start_time_seconds %d\n", startTimeSeconds)
|
fmt.Fprintf(w, "process_start_time_seconds %d\n", startTimeSeconds)
|
||||||
fmt.Fprintf(w, "process_virtual_memory_bytes %d\n", p.Vsize)
|
fmt.Fprintf(w, "process_virtual_memory_bytes %d\n", p.Vsize)
|
||||||
|
writeProcessMemMetrics(w)
|
||||||
writeIOMetrics(w)
|
writeIOMetrics(w)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,6 +208,69 @@ func getMaxFilesLimit(path string) (uint64, error) {
|
|||||||
return 0, fmt.Errorf("cannot find max open files limit")
|
return 0, fmt.Errorf("cannot find max open files limit")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://man7.org/linux/man-pages/man5/procfs.5.html
|
||||||
|
type memStats struct {
|
||||||
|
vmPeak uint64
|
||||||
|
rssPeak uint64
|
||||||
|
rssAnon uint64
|
||||||
|
rssFile uint64
|
||||||
|
rssShmem uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeProcessMemMetrics(w io.Writer) {
|
||||||
|
ms, err := getMemStats("/proc/self/status")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("ERROR: cannot determine memory status: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "process_virtual_memory_peak_bytes %d\n", ms.vmPeak)
|
||||||
|
fmt.Fprintf(w, "process_resident_memory_peak_bytes %d\n", ms.rssPeak)
|
||||||
|
fmt.Fprintf(w, "process_resident_memory_anon_bytes %d\n", ms.rssAnon)
|
||||||
|
fmt.Fprintf(w, "process_resident_memory_file_bytes %d\n", ms.rssFile)
|
||||||
|
fmt.Fprintf(w, "process_resident_memory_shared_bytes %d\n", ms.rssShmem)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMemStats(path string) (*memStats, error) {
|
||||||
|
data, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var ms memStats
|
||||||
|
lines := strings.Split(string(data), "\n")
|
||||||
|
for _, s := range lines {
|
||||||
|
if !strings.HasPrefix(s, "Vm") && !strings.HasPrefix(s, "Rss") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Extract key value.
|
||||||
|
line := strings.Fields(s)
|
||||||
|
if len(line) != 3 {
|
||||||
|
return nil, fmt.Errorf("cannot extract soft limit from %q", s)
|
||||||
|
}
|
||||||
|
memStatName := line[0]
|
||||||
|
memStatValue := line[1]
|
||||||
|
value, err := strconv.ParseUint(memStatValue, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("cannot parse soft limit from %q: %s", s, err)
|
||||||
|
}
|
||||||
|
if line[2] == "kB" {
|
||||||
|
value = value * 1024
|
||||||
|
}
|
||||||
|
switch memStatName {
|
||||||
|
case "VmPeak:":
|
||||||
|
ms.vmPeak = value
|
||||||
|
case "VmHWM:":
|
||||||
|
ms.rssPeak = value
|
||||||
|
case "RssAnon:":
|
||||||
|
ms.rssAnon = value
|
||||||
|
case "RssFile:":
|
||||||
|
ms.rssFile = value
|
||||||
|
case "RssShmem:":
|
||||||
|
ms.rssShmem = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &ms, nil
|
||||||
|
}
|
||||||
// getRSSStats returns RSS bytes for page cache and anonymous memory.
|
// getRSSStats returns RSS bytes for page cache and anonymous memory.
|
||||||
func getRSSStats() (uint64, uint64, error) {
|
func getRSSStats() (uint64, uint64, error) {
|
||||||
filepath := "/proc/self/smaps"
|
filepath := "/proc/self/smaps"
|
||||||
|
@ -249,3 +249,18 @@ func TestGetOpenFDsCount(t *testing.T) {
|
|||||||
f(0, "testdata/fd/0", true)
|
f(0, "testdata/fd/0", true)
|
||||||
f(0, "testdata/limits", true)
|
f(0, "testdata/limits", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetMemStats(t *testing.T) {
|
||||||
|
f := func(want memStats, path string, wantErr bool) {
|
||||||
|
t.Helper()
|
||||||
|
got, err := getMemStats(path)
|
||||||
|
if (err != nil && !wantErr) || (err == nil && wantErr) {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if got != nil && *got != want {
|
||||||
|
t.Fatalf("unexpected result: %d, want: %d at getMemStats", *got, want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f(memStats{vmPeak: 2130489344, rssPeak: 200679424, rssAnon: 121602048, rssFile: 11362304}, "testdata/status", false)
|
||||||
|
f(memStats{}, "testdata/status_bad", true)
|
||||||
|
}
|
||||||
|
115
testdata/status
vendored
Normal file
115
testdata/status
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
Name: victoria-metric
|
||||||
|
Umask: 0022
|
||||||
|
State: S (sleeping)
|
||||||
|
Tgid: 1
|
||||||
|
Ngid: 0
|
||||||
|
Pid: 1
|
||||||
|
PPid: 0
|
||||||
|
TracerPid: 0
|
||||||
|
Uid: 0 0 0 0
|
||||||
|
Gid: 0 0 0 0
|
||||||
|
FDSize: 256
|
||||||
|
Groups: 1 2 3 4 6 10 11 20 26 27
|
||||||
|
NStgid: 1
|
||||||
|
NSpid: 1
|
||||||
|
NSpgid: 1
|
||||||
|
NSsid: 1
|
||||||
|
VmPeak: 2080548 kB
|
||||||
|
VmSize: 2080464 kB
|
||||||
|
VmLck: 0 kB
|
||||||
|
VmPin: 0 kB
|
||||||
|
VmHWM: 195976 kB
|
||||||
|
VmRSS: 105212 kB
|
||||||
|
RssAnon: 94092 kB
|
||||||
|
RssFile: 11120 kB
|
||||||
|
RssShmem: 0 kB
|
||||||
|
VmData: 632076 kB
|
||||||
|
VmStk: 132 kB
|
||||||
|
VmExe: 7004 kB
|
||||||
|
VmLib: 8 kB
|
||||||
|
VmPTE: 940 kB
|
||||||
|
VmSwap: 0 kB
|
||||||
|
HugetlbPages: 0 kB
|
||||||
|
CoreDumping: 0
|
||||||
|
THP_enabled: 1
|
||||||
|
Threads: 14
|
||||||
|
SigQ: 1/127458
|
||||||
|
SigPnd: 0000000000000000
|
||||||
|
ShdPnd: 0000000000000000
|
||||||
|
SigBlk: fffffffc3bfa3a00
|
||||||
|
SigIgn: 0000000000000000
|
||||||
|
SigCgt: fffffffdffc1feff
|
||||||
|
CapInh: 00000000a80425fb
|
||||||
|
CapPrm: 00000000a80425fb
|
||||||
|
CapEff: 00000000a80425fb
|
||||||
|
CapBnd: 00000000a80425fb
|
||||||
|
CapAmb: 0000000000000000
|
||||||
|
NoNewPrivs: 0
|
||||||
|
Seccomp: 0
|
||||||
|
Speculation_Store_Bypass: thread vulnerable
|
||||||
|
Cpus_allowed: ff
|
||||||
|
Cpus_allowed_list: 0-7
|
||||||
|
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
|
||||||
|
Mems_allowed_list: 0
|
||||||
|
voluntary_ctxt_switches: 82
|
||||||
|
nonvoluntary_ctxt_switches: 21
|
||||||
|
/ # cat /proc/1/stat
|
||||||
|
stat statm status
|
||||||
|
/ # cat /proc/1/statm
|
||||||
|
520122 27057 2780 1751 0 158052 0
|
||||||
|
/ # cat /proc/1/status
|
||||||
|
Name: victoria-metric
|
||||||
|
Umask: 0022
|
||||||
|
State: S (sleeping)
|
||||||
|
Tgid: 1
|
||||||
|
Ngid: 0
|
||||||
|
Pid: 1
|
||||||
|
PPid: 0
|
||||||
|
TracerPid: 0
|
||||||
|
Uid: 0 0 0 0
|
||||||
|
Gid: 0 0 0 0
|
||||||
|
FDSize: 256
|
||||||
|
Groups: 1 2 3 4 6 10 11 20 26 27
|
||||||
|
NStgid: 1
|
||||||
|
NSpid: 1
|
||||||
|
NSpgid: 1
|
||||||
|
NSsid: 1
|
||||||
|
VmPeak: 2080556 kB
|
||||||
|
VmSize: 2080520 kB
|
||||||
|
VmLck: 0 kB
|
||||||
|
VmPin: 0 kB
|
||||||
|
VmHWM: 195976 kB
|
||||||
|
VmRSS: 129848 kB
|
||||||
|
RssAnon: 118752 kB
|
||||||
|
RssFile: 11096 kB
|
||||||
|
RssShmem: 0 kB
|
||||||
|
VmData: 633020 kB
|
||||||
|
VmStk: 132 kB
|
||||||
|
VmExe: 7004 kB
|
||||||
|
VmLib: 8 kB
|
||||||
|
VmPTE: 984 kB
|
||||||
|
VmSwap: 0 kB
|
||||||
|
HugetlbPages: 0 kB
|
||||||
|
CoreDumping: 0
|
||||||
|
THP_enabled: 1
|
||||||
|
Threads: 14
|
||||||
|
SigQ: 1/127458
|
||||||
|
SigPnd: 0000000000000000
|
||||||
|
ShdPnd: 0000000000000000
|
||||||
|
SigBlk: fffffffc3bfa3a00
|
||||||
|
SigIgn: 0000000000000000
|
||||||
|
SigCgt: fffffffdffc1feff
|
||||||
|
CapInh: 00000000a80425fb
|
||||||
|
CapPrm: 00000000a80425fb
|
||||||
|
CapEff: 00000000a80425fb
|
||||||
|
CapBnd: 00000000a80425fb
|
||||||
|
CapAmb: 0000000000000000
|
||||||
|
NoNewPrivs: 0
|
||||||
|
Seccomp: 0
|
||||||
|
Speculation_Store_Bypass: thread vulnerable
|
||||||
|
Cpus_allowed: ff
|
||||||
|
Cpus_allowed_list: 0-7
|
||||||
|
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
|
||||||
|
Mems_allowed_list: 0
|
||||||
|
voluntary_ctxt_switches: 82
|
||||||
|
nonvoluntary_ctxt_switches: 21
|
115
testdata/status_bad
vendored
Normal file
115
testdata/status_bad
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
Name: victoria-metric
|
||||||
|
Umask: 0022
|
||||||
|
State: S (sleeping)
|
||||||
|
Tgid: 1
|
||||||
|
Ngid: 0
|
||||||
|
Pid: 1
|
||||||
|
PPid: 0
|
||||||
|
TracerPid: 0
|
||||||
|
Uid: 0 0 0 0
|
||||||
|
Gid: 0 0 0 0
|
||||||
|
FDSize: 256
|
||||||
|
Groups: 1 2 3 4 6 10 11 20 26 27
|
||||||
|
NStgid: 1
|
||||||
|
NSpid: 1
|
||||||
|
NSpgid: 1
|
||||||
|
NSsid: 1
|
||||||
|
VmPeak: 2080548 kB
|
||||||
|
VmSize: 2080464 kB
|
||||||
|
VmLck: 0 kB
|
||||||
|
VmPin: 0 kB
|
||||||
|
VmHWM: 195976 kB
|
||||||
|
VmRSS: 105212 kB
|
||||||
|
RssAnon: 94092 kB
|
||||||
|
RssFile: 11120 kB
|
||||||
|
RssShmem: 0 kB
|
||||||
|
VmData: 632076 kB
|
||||||
|
VmStk: 132 kB
|
||||||
|
VmExe: 7004 kB
|
||||||
|
VmLib: 8 kB
|
||||||
|
VmPTE: 940 kB
|
||||||
|
VmSwap: 0 kB
|
||||||
|
HugetlbPages: 0 kB
|
||||||
|
CoreDumping: 0
|
||||||
|
THP_enabled: 1
|
||||||
|
Threads: 14
|
||||||
|
SigQ: 1/127458
|
||||||
|
SigPnd: 0000000000000000
|
||||||
|
ShdPnd: 0000000000000000
|
||||||
|
SigBlk: fffffffc3bfa3a00
|
||||||
|
SigIgn: 0000000000000000
|
||||||
|
SigCgt: fffffffdffc1feff
|
||||||
|
CapInh: 00000000a80425fb
|
||||||
|
CapPrm: 00000000a80425fb
|
||||||
|
CapEff: 00000000a80425fb
|
||||||
|
CapBnd: 00000000a80425fb
|
||||||
|
CapAmb: 0000000000000000
|
||||||
|
NoNewPrivs: 0
|
||||||
|
Seccomp: 0
|
||||||
|
Speculation_Store_Bypass: thread vulnerable
|
||||||
|
Cpus_allowed: ff
|
||||||
|
Cpus_allowed_list: 0-7
|
||||||
|
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
|
||||||
|
Mems_allowed_list: 0
|
||||||
|
voluntary_ctxt_switches: 82
|
||||||
|
nonvoluntary_ctxt_switches: 21
|
||||||
|
/ # cat /proc/1/stat
|
||||||
|
stat statm status
|
||||||
|
/ # cat /proc/1/statm
|
||||||
|
520122 27057 2780 1751 0 158052 0
|
||||||
|
/ # cat /proc/1/status
|
||||||
|
Name: victoria-metric
|
||||||
|
Umask: 0022
|
||||||
|
State: S (sleeping)
|
||||||
|
Tgid: 1
|
||||||
|
Ngid: 0
|
||||||
|
Pid: 1
|
||||||
|
PPid: 0
|
||||||
|
TracerPid: 0
|
||||||
|
Uid: 0 0 0 0
|
||||||
|
Gid: 0 0 0 0
|
||||||
|
FDSize: 256
|
||||||
|
Groups: 1 2 3 4 6 10 11 20 26 27
|
||||||
|
NStgid: 1
|
||||||
|
NSpid: 1
|
||||||
|
NSpgid: 1
|
||||||
|
NSsid: 1
|
||||||
|
VmPeak: 2080556 kB
|
||||||
|
VmSize: 2080520 kB as
|
||||||
|
VmLck: 0 kB
|
||||||
|
VmPin: 0 kB
|
||||||
|
VmHWM: 195976 kB
|
||||||
|
VmRSS: 129848 kB
|
||||||
|
RssAnon: 118752 kB
|
||||||
|
RssFile: 11096 kB
|
||||||
|
RssShmem: 0 kB
|
||||||
|
VmData: 633020 kB
|
||||||
|
VmStk: 132 kB
|
||||||
|
VmExe: 7004 kB
|
||||||
|
VmLib: 8 kB
|
||||||
|
VmPTE: 984 kB
|
||||||
|
VmSwap: 0 kB
|
||||||
|
HugetlbPages: 0 kB
|
||||||
|
CoreDumping: 0
|
||||||
|
THP_enabled: 1
|
||||||
|
Threads: 14
|
||||||
|
SigQ: 1/127458
|
||||||
|
SigPnd: 0000000000000000
|
||||||
|
ShdPnd: 0000000000000000
|
||||||
|
SigBlk: fffffffc3bfa3a00 fsa
|
||||||
|
SigIgn: 0000000000000000
|
||||||
|
SigCgt: fffffffdffc1feff
|
||||||
|
CapInh: 00000000a80425fb
|
||||||
|
CapPrm: 00000000a80425fb
|
||||||
|
CapEff: 00000000a80425fb
|
||||||
|
CapBnd: 00000000a80425fb
|
||||||
|
CapAmb: 0000000000000000
|
||||||
|
NoNewPrivs: 0
|
||||||
|
Seccomp: 0
|
||||||
|
Speculation_Store_Bypass: thread vulnerable
|
||||||
|
Cpus_allowed: ff
|
||||||
|
Cpus_allowed_list: 0-7
|
||||||
|
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
|
||||||
|
Mems_allowed_list: 0
|
||||||
|
voluntary_ctxt_switches: 82
|
||||||
|
nonvoluntary_ctxt_switches: 21
|
Loading…
Reference in New Issue
Block a user