Назад | Перейти на главную страницу

Подтвердите утечку памяти, указав сверху «свободная» и «кешированная»?

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

я использую top как диагностический инструмент. Пример полей памяти сверху:

Mem:    118616k total,    83980k used,    34636k free,        0k buffers
Swap:        0k total,        0k used,        0k free,    24140k cached

Я вижу ценность free непрерывно снижается, однако, значение cached постоянно увеличивается.

Чтобы подтвердить, что есть утечка памяти, сумма free+cached должен постоянно снижаться, а не просто free уменьшается (в этом случае ядро ​​может просто использовать свободную память для кеширования)?

Утечка памяти процесса пользовательского пространства приведет к постоянно растущему объему памяти, используемой этот процесс.

Вы можете просто отслеживать процессы, используя top в пакетном режиме (однако кажется, что top не поддерживает сортировку по памяти в пакетном режиме, https://bugzilla.redhat.com/show_bug.cgi?id=547749)

В качестве альтернативы top вы также можете каждую минуту выполнять следующую команду:

ps aux --sort -rss | head -n 10

чтобы увидеть 10 самых популярных процессов, использующих ОЗУ.

Например.

while [ true ]; do ps aux --sort -rss | head -n 10 >> memory_usage_log.txt; echo "#########" >> memory_usage_log.txt; sleep 60; done;

Если какой-либо процесс со временем использует все больше и больше ОЗУ, при отсутствии активности или входных данных, это может быть утечка памяти (например, если вы запускаете веб-браузер и продолжаете его работу, не используя его, использование памяти в Интернете браузер явно не должен расти со временем).

Невозможно узнать, есть ли у вас утечка памяти. Вы можете предположить это, основываясь на ваших знаниях о системе и программах вместо нее. Я бы проверил файл /proc/meminfo, принимая значение MemFree и проверять его через определенные промежутки времени. Если он всегда уменьшается, через определенные промежутки времени я должен утверждать, что есть утечка памяти.

  • cat /proc/meminfo | gawk '{if (/MemFree/ ~ $0) print $2}'

Но насколько я знаю, нет возможности проверить "глобальную" утечку памяти. Ждите других ответов;)