как я нахожу, какой процесс память утечки [закрывается]

Как следует из сообщения об ошибке, вы определяете функцию в месте, которое вы не должны - в данном случае внутри функции main. Уберите его оттуда, и с вами все будет в порядке.

25
задан Adam Rosenfield 27 September 2008 в 15:26
поделиться

7 ответов

Если программа просачивается в течение длительного времени, top может оказаться непрактичным. Я написал бы простые сценарии оболочки, которые добавляют результат «ps aux» в файл каждые X секунд, в зависимости от того, сколько времени требуется для утечки значительных объемов памяти. Что-то вроде:

while true
do
echo "---------------------------------" >> /tmp/mem_usage
date >> /tmp/mem_usage
ps aux >> /tmp/mem_usage
sleep 60
done
9
ответ дан 28 November 2019 в 21:11
поделиться

В дополнение к вершине можно использовать Системный монитор (Система - администрация - Системный монитор, затем избранная вкладка Processes). Выберите Представление - Все Процессы, перейдите к Редактированию - Предпочтения и включите столбец Virtual Memory. Вид или этим столбцом, или столбцом

Memory
5
ответ дан 28 November 2019 в 21:11
поделиться

Сложное задание. Обычно я бы предложил взять отладчик / профилировщик памяти, например, Valgrind , и запускать в нем программы одну за другой. Рано или поздно вы обнаружите утечку программы и сможете сообщить об этом разработчику или исправить ее самостоятельно.

4
ответ дан 28 November 2019 в 21:11
поделиться

Я предлагаю использование htop как лучшая альтернатива вершине.

4
ответ дан 28 November 2019 в 21:11
поделиться

Как и предполагалось, путь - это Вальгринд. Это профилировщик, который проверяет многие аспекты производительности вашего приложения, включая использование памяти.

Запуск вашего приложения через Valgrind позволит вам проверить, забыли ли вы освободить память, выделенную для malloc, дважды ли вы освободили одну и ту же память и т. Д.

3
ответ дан 28 November 2019 в 21:11
поделиться

Если Вы не можете сделать этого дедуктивно, рассмотрите шаблон отладки Вспышки Сигнала: Увеличьте объем памяти, выделенный одним процессом фактором десять. Тогда запустите свою программу.

, Если сумма пропущенной памяти является тем же, тот процесс не был источником утечки; восстановите процесс и сделайте ту же модификацию к следующему процессу.

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

3
ответ дан 28 November 2019 в 21:11
поделиться

Можно работать top команда (для выполнения нев интерактивном режиме, тип top -b -n 1). Для наблюдения приложений, которые пропускают память посмотрите на следующие столбцы:

  • RPRVT - резидентный частный размер адресного пространства
  • RSHRD - резидентный объект совместно использовал размер адресного пространства
  • RSIZE - резидентная емкость памяти
  • VPRVT - частный размер адресного пространства
  • VSIZE - размер общей памяти
14
ответ дан 28 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

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