Использование памяти монитора дочернего процесса

У меня есть демон Linux, что ветвления несколько детей и контролируют их для катастрофических отказов (перезапускающий по мере необходимости). Будет замечательно, если родитель мог бы контролировать использование памяти дочерних процессов - чтобы обнаружить утечки памяти и перезапустить дочерние процессы когда движение вне определенного размера. Как я могу сделать это?

5
задан Omry Yadan 2 May 2010 в 17:12
поделиться

2 ответа

Вы должны быть в состоянии получить подробную информацию о памяти из /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), которым они соответствуют.

Вы также можете проверить /proc/${PID}/statm.

4
ответ дан 14 December 2019 в 19:06
поделиться

, вы можете попробовать запустить сценарий монитора, запускающий vmstat параллельно с вашим процессом (обратите внимание, что это не очень хорошая идея, если вы используете этот script несколько раз, так как вы получите несколько копий vmstat). Затем этот сценарий монитора может использовать свободную память плюс размер буфера и кеша, чтобы получить объем памяти, доступный ОС, и вы можете это отслеживать. Затем, если это опускается ниже некоторого порога, вы можете проверить самые большие процессы, вызвав ps -e -o ... (подробности см. На странице руководства, но попробуйте vsz, pcpu, user, pid, args в качестве отправной точки).

Я бы посоветовал запустить этот монитор как отдельный процесс и убивать вредоносный процесс, когда он становится слишком большим. Вы можете ограничить набор отслеживаемых процессов с помощью параметра

-u user-name

до ps.

Это все хакерство (в смысле Великобритании) - правильное решение - исправить утечки, если у вас есть код.

1
ответ дан 14 December 2019 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: