Вопрос или проблема
Чтобы увидеть информацию о памяти, я могу посмотреть её в top
или через cat /proc/meminfo
.
В /proc/meminfo я могу увидеть использование свопа всей системы следующим образом:
SwapCached: 4 kB
SwapTotal: 33460220 kB
SwapFree: 33460216 kB
Но может возникнуть ситуация, когда почти весь своп используется (т.е. остается слишком маленький объем SwapFree
). Как я могу определить, какие процессы используют этот своп?
UPD: слишком маленький объем SwapFree
в основном означает, что есть какой-то процесс(ы), который(ые) использовали много памяти и не использовали её в течение длительного времени. Мне нужно найти такие процессы.
- Запустите
top
- Нажмите
f
, чтобы выбрать отображаемые поля - Перемещайтесь вниз к SWAP с помощью стрелок
- Нажмите
Space
– SWAP будет отмечен звездочкой*
- Нажмите правую стрелку – это позволит переместить SWAP в удобное место в списке, например, между %MEM и TIME+
- Нажмите q, чтобы вернуться к представлению top
Шаг 5 не является обязательным, это просто удобно – без него SWAP будет отображаться как последний элемент в списке, после COMMAND
.
Вы можете использовать команду smem
.
Память может быть отображена по процессу, по пользователю, по отображениям
или по всему системе. Доступны как текстовый, так и графический вывод.
Инструмент для мониторинга использования памяти и свопа – это smemstat, который может показать вывод, похожий на top, с
smemstat -mT
( “Swap сообщает о памяти, которая была выгружена на диск.” man smemstat )
в терминале, отсортированным по наивысшему использованию памяти сверху.
Вы также можете проверить файл smaps_rollup
из файловой системы /proc
:
Пример:
$ grep ^Swap /proc/self/smaps_rollup
Swap: 0 kB
SwapPss: 0 kB
В этом случае ничего не выгружено на своп, так как это “свежий” процесс (grep). Но если посмотреть на init, например:
$ grep ^Swap /proc/1/smaps_rollup
Swap: 352 kB
SwapPss: 200 kB
Вы знаете, что из всей используемой процессом 1 памяти, 352 Кб выгружены на своп. SwapPss не учитывает подлежащие выгруженные общие объекты.
Ответ или решение
Для выявления процессов, которые используют своп-память на Linux, можно воспользоваться несколькими подходами и инструментами. Рассмотрим основные шаги:
-
Использование
top
:- Запустите команду
top
в терминале. - Нажмите клавишу
f
, чтобы перейти к выбору отображаемых полей. - С помощью стрелок переместитесь вниз до поля
SWAP
. - Нажмите клавишу
Space
, чтобы отметить полеSWAP
(оно будет предшествовано символом*
). - Вы можете переместить поле
SWAP
в более удобное место в списке, нажав правую стрелку. Например, расположите его между%MEM
иTIME+
. - Нажмите
q
, чтобы вернуться к основному видуtop
. - Теперь вы сможете видеть, какие процессы используют своп-память, и оценить их влияние на систему.
- Запустите команду
-
Использование
smem
:- Установите и выполните
smem
, если он еще не установлен. Данная утилита позволяет просматривать использование памяти по процессам и пользователям. - Выполнение команды
smem
выведет информацию о том, сколько памяти и свопа использует каждый процесс. - Более подробную информацию можно получить, прочитав мануал:
man smem
.
- Установите и выполните
-
Использование
smemstat
:- Установите
smemstat
и выполните командуsmemstat -mT
. - Данная команда предоставит вам сводную информацию о свопе, отсортированную по высшему использованию памяти в верхней части списка. Это поможет быстро найти «выматанные» процессы.
- Установите
-
Проверка
/proc/self/smaps_rollup
:- Вы можете просмотреть сводные данные о каждой памяти процесса, используя:
grep ^Swap /proc/self/smaps_rollup
- Для проверки других процессов, например, процесса с ID 1 (обычно это
init
), выполните, например:grep ^Swap /proc/1/smaps_rollup
- Это даст вам представление о том, сколько памяти конкретный процесс использует и сколько из нее находится в состоянии свопа.
- Вы можете просмотреть сводные данные о каждой памяти процесса, используя:
Каждый из этих методов позволяет детально оценить использование свопа в системе и идентифицировать процессы, которые могут потреблять его в больших количествах. Это может быть полезно при диагностировании проблем с производительностью, связанных с нехваткой оперативной памяти и чрезмерным использованием свопа, что может приводить к замедлению работы системы.