Мониторинг потребления памяти более чем за 1 час
Я пытаюсь контролировать потребление памяти процессом в течение долгого времени с массивом Valgrind. Процесс активен и выполняет некоторые рутинные операции через определенные промежутки времени, и я хотел бы видеть потребление памяти всего процесса.
Я запускаю процесс с:
valgrind --tool=massif --trace-children=yes <program name> <arguments>
Моя программа создает демона.
Я вижу, как массив создает файл для основного процесса, который выходит почти сразу, пока другой еще жив. Когда я убиваю процесс демона, массив выводит другой файл с pid демона. Тем не менее, я замечаю, что я получу этот второй файл, только если я позволю процессу продолжаться не более 15 минут или около того. Если я позволю ему работать больше, файл не будет создан. Valgrind не показывает ошибок.
Я подозреваю, что valgrind не в состоянии обрабатывать такой большой объем информации, верно? Любое предложение о том, как я мог бы достичь своей цели любым другим способом?
Я использую последнюю версию valgrind: 3.12.0
1 ответ
Если valgrind сталкивается с проблемой (например, из-за нехватки памяти), он должен выдать сообщение об ошибке. Возможная причина отсутствия сообщения об ошибке, когда valgrind умирает, состоит в том, что valgrind был убит -9 или убит OOM.
Чтобы проверить это, вы можете использовать vgdb в цикле в другом окне, делая что-то вроде:
while true
do
vgdb .... valgrind monitor command ...
sleep 60
done
В качестве команды монитора вы можете использовать команду для получения внутреннего состояния памяти valgrind:
vgdb v.info stats
или, альтернативно, при работе с массивом, вы можете создавать снимок памяти каждые 60 секунд, используя
vgdb detailed_snapshot filenameXXX
(вам нужно изменить имя файла для каждого снимка)
См. http://www.valgrind.org/docs/manual/manual-core-adv.html для получения дополнительной информации о командах vgdb и monitor.