Search code examples
clinuxmemoryforkhealth-monitoring

Monitor memory usage of child process


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?


Solution

  • 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
    

    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.

    You can also check into /proc/${PID}/statm.