Мониторинг потребления памяти более чем за 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.

Другие вопросы по тегам