监视子进程的内存使用情况

Omr*_*dan 5 c linux memory fork health-monitoring

我有一个Linux守护进程,它会分叉几个孩子并监视它们是否崩溃(根据需要重新启动).如果父进程可以监视子进程的内存使用情况 - 检测内存泄漏并在超出特定大小时重新启动子进程,那将会很棒.我怎样才能做到这一点?

Whi*_*ind 4

您应该能够从 /proc/{PID}/status 获取详细的内存信息:

Name:   bash
State:  S (sleeping)
Tgid:   6053
Pid:    6053
PPid:   6050
TracerPid:  0
Uid:    1007    1007    1007    1007
Gid:    1007    1007    1007    1007
FDSize: 256
Groups: 1007 
VmPeak:    48076 kB
VmSize:    48044 kB
VmLck:         0 kB
VmHWM:      4932 kB
VmRSS:      2812 kB
VmData:     2232 kB
VmStk:        84 kB
VmExe:       832 kB
VmLib:      6468 kB
VmPTE:       108 kB
Threads:    1
SigQ:   0/8190
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001010
SigCgt: 0000000188020001
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed:   0f
Mems_allowed:   00000000,00000001
voluntary_ctxt_switches:    69227121
nonvoluntary_ctxt_switches: 19071
Run Code Online (Sandbox Code Playgroud)

然而,除非内存泄漏非常严重,否则很难通过查看进程统计信息来检测它们,因为 malloc 和 free 通常是从它们对应的系统调用 (brk/sbrk) 中抽象出来的。

您还可以检查/proc/${PID}/statm。