Как найти утечки памяти процесса? - PullRequest
1 голос
/ 22 августа 2011

Мне нужно выяснить использование памяти конкретным процессом.На самом деле мне нужно выяснить, есть ли утечка памяти в приложении, которое я написал.Я не могу использовать memfree или /proc/meminfo, так как в нашей системе есть папка журнала, смонтированная в ОЗУ.

Я прошел через множество подобных запросов, и некоторые из них предложили использовать команду ps aux.Я немного запутался в том, какой параметр дает правильное использование памяти или, возможно, утечка памяти через несколько часов.PS AUX дает VSZ(virtual mem) и RSS(resident set size).

Я написал пример программы, которая выделяет 4 байта памяти и удаляет ее.После запуска программы кажется, что значение VSZ увеличивается при выделении памяти, но не уменьшается при удалении.Но значение RSS показало правильное значение, увеличивается при распределении и уменьшается при отключении.

Кто-нибудь может подтвердить, будет ли использование значения RSS указывать на величину утечки памяти в коде?Или есть другой способ?

Ответы [ 3 ]

2 голосов
/ 29 марта 2013

Чтобы узнать подробности, вы можете использовать pmap: pmap pid

root@tm# pmap 1216
1216:   /usr/sbin/acpid
08048000     32K r-x--  /usr/sbin/acpid
08050000      4K rw---  /usr/sbin/acpid
08051000      4K rw---    [ anon ]
088f2000    140K rw---    [ anon ]
b7642000      4K rw---    [ anon ]
b7643000   1280K r-x--  /lib/i686/cmov/libc-2.11.3.so
b7783000      4K -----  /lib/i686/cmov/libc-2.11.3.so
b7784000      8K r----  /lib/i686/cmov/libc-2.11.3.so
b7786000      4K rw---  /lib/i686/cmov/libc-2.11.3.so
b7787000     12K rw---    [ anon ]
b7798000      8K rw---    [ anon ]
b779a000      4K r-x--    [ anon ]
b779b000    108K r-x--  /lib/ld-2.11.3.so
b77b6000      4K r----  /lib/ld-2.11.3.so
b77b7000      4K rw---  /lib/ld-2.11.3.so
bfd59000     84K rw---    [ stack ]
 total     1704K
1 голос
/ 07 июня 2013

Я знаю, что это древнее, но я чувствую необходимость сказать, что для чего-то подобного вы действительно хотите использовать такой инструмент, как Valgrind . А именно, Вальгринд. Это определенно верный путь, особенно с программой, которую вы пишете (или написали), поскольку вы также можете настроить флаги компиляции, чтобы получить наиболее полезный вывод. Предполагая, что вы используете gcc, попробуйте скомпилировать с -g, чтобы включить символы отладки, а не strip двоичный файл.

Использование довольно просто, и документы находятся на связанном веб-сайте. Основное использование - просто valgrind program в командной строке. Он покажет вам не только специфику, но и хорошее резюме памяти, просочившейся в конце.

0 голосов
/ 22 августа 2011

Я использую топ для такого рода вещей.

top -p <process id>
...