У меня довольно сложная программа (Python с SWIG-кодом C ++, долго работающий сервер), который показывает постоянно растущее использование резидентной памяти. Я копался с обычными инструментами для утечки (valgrind, модуль Pythons gc и т. Д.), Но пока безрезультатно. Я немного боюсь, что настоящая проблема заключается в фрагментации памяти в Python и / или в управляемой памяти libc.
В любом случае, мой вопрос сейчас более конкретен: есть ли инструмент, позволяющий визуализировать использование резидентной памяти и в идеале показать, как она развивается со временем? Я думаю, что необработанные данные находятся в / proc / $ PID / smaps, но я надеялся, что есть какой-то инструмент, который показывает мне хороший график количества использованных файлов mmap, анонимной памяти mmap и кучи с течением времени, так что легче (буквально) увидеть, что меняется. Я ничего не мог найти, хотя.
Кто-нибудь знает инструмент, который отображает карту памяти (тип памяти и объем) определенного процесса в пространстве и времени интуитивно понятным способом?
Обновление: Я нашел инструмент "pmap", но версия в моей системе, похоже, не поддерживает RSS и не дает возможности объединять размеры для всех отображаемых файлов, соответственно. нанесены на карту "анон" области. В итоге я взломал небольшой скрипт, который анализирует / proc / $ PID / smaps каждые две минуты, пока оригинальная программа запускается и печатает такие строки:
12:00:28 {'_TOTAL': 729.20703125, 'file': 53.609375, 'heap': 22.08984375,
'anon': 653.5, 'stack': 0.0078125}
...
15:42:47 {'_TOTAL': 940.16015625, 'file': 53.484375, 'heap': 22.2109375,
'anon': 864.45703125, 'stack': 0.0078125}
Нет хороших графиков, но после нескольких часов работы я думаю, что сейчас безопасная ставка, когда мне нужно поближе взглянуть на сегменты памяти 'anon': -)
Обновление: В последнем выпуске valgrind профилирование уровня поддержки страниц в профиле памяти ("массив") было выполнено с помощью --pages-as-heap=yes
. Ура! Запуск моей программы в течение нескольких часов через массив и последующую подачу полученного файла в Massif Visualizer привел к хорошему графику потребления памяти по типу страницы с течением времени, включая трассировки стека, чтобы увидеть, куда поступают все вызовы mmap. от. \ О /