监视子进程的内存使用情况 [英] Monitor memory usage of child process
问题描述
我有一个Linux守护进程,该守护进程派生了几个子进程并监视它们的崩溃(根据需要重新启动).如果父级可以监视子进程的内存使用情况,则可以很好-检测内存泄漏并在超出一定大小时重新启动子进程.我该怎么办?
I have a Linux daemon that forks a few children and monitors them for crashes (restarting as needed). It will be great if the parent could monitor the memory usage of child processes - to detect memory leaks and restart child processes when the go beyond a certain size. How can I do this?
推荐答案
您应该能够从/proc/{PID}/status中获取详细的内存信息:
You should be able to get detailed memory information out of /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
但是,除非内存泄漏非常严重,否则从进程统计信息中很难检测到它们,因为malloc和free通常是从它们所对应的系统调用(brk/sbrk)中抽象出来的.
However, unless memory leaks are dramatic, it's difficult to detect them looking at process statistics, because malloc and free are usually quite abstract from system calls (brk/sbrk) to which they correspond.
您还可以签入/proc/$ {PID}/statm.
You can also check into /proc/${PID}/statm.
这篇关于监视子进程的内存使用情况的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!