Проверьте, какие процессы используют своп на Linux?

Вопрос или проблема

Чтобы увидеть информацию о памяти, я могу посмотреть её в top или через cat /proc/meminfo.
В /proc/meminfo я могу увидеть использование свопа всей системы следующим образом:

SwapCached:            4 kB
SwapTotal:      33460220 kB
SwapFree:       33460216 kB

Но может возникнуть ситуация, когда почти весь своп используется (т.е. остается слишком маленький объем SwapFree). Как я могу определить, какие процессы используют этот своп?

UPD: слишком маленький объем SwapFree в основном означает, что есть какой-то процесс(ы), который(ые) использовали много памяти и не использовали её в течение длительного времени. Мне нужно найти такие процессы.

  1. Запустите top
  2. Нажмите f, чтобы выбрать отображаемые поля
  3. Перемещайтесь вниз к SWAP с помощью стрелок
  4. Нажмите Space – SWAP будет отмечен звездочкой *
  5. Нажмите правую стрелку – это позволит переместить SWAP в удобное место в списке, например, между %MEM и TIME+
  6. Нажмите q, чтобы вернуться к представлению top

Шаг 5 не является обязательным, это просто удобно – без него SWAP будет отображаться как последний элемент в списке, после COMMAND.

Вы можете использовать команду smem.

Страницы мануала smem:

Память может быть отображена по процессу, по пользователю, по отображениям
или по всему системе. Доступны как текстовый, так и графический вывод.

Инструмент отчета о памяти 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, можно воспользоваться несколькими подходами и инструментами. Рассмотрим основные шаги:

  1. Использование top:

    • Запустите команду top в терминале.
    • Нажмите клавишу f, чтобы перейти к выбору отображаемых полей.
    • С помощью стрелок переместитесь вниз до поля SWAP.
    • Нажмите клавишу Space, чтобы отметить поле SWAP (оно будет предшествовано символом *).
    • Вы можете переместить поле SWAP в более удобное место в списке, нажав правую стрелку. Например, расположите его между %MEM и TIME+.
    • Нажмите q, чтобы вернуться к основному виду top.
    • Теперь вы сможете видеть, какие процессы используют своп-память, и оценить их влияние на систему.
  2. Использование smem:

    • Установите и выполните smem, если он еще не установлен. Данная утилита позволяет просматривать использование памяти по процессам и пользователям.
    • Выполнение команды smem выведет информацию о том, сколько памяти и свопа использует каждый процесс.
    • Более подробную информацию можно получить, прочитав мануал: man smem.
  3. Использование smemstat:

    • Установите smemstat и выполните команду smemstat -mT.
    • Данная команда предоставит вам сводную информацию о свопе, отсортированную по высшему использованию памяти в верхней части списка. Это поможет быстро найти «выматанные» процессы.
  4. Проверка /proc/self/smaps_rollup:

    • Вы можете просмотреть сводные данные о каждой памяти процесса, используя:
      grep ^Swap /proc/self/smaps_rollup
    • Для проверки других процессов, например, процесса с ID 1 (обычно это init), выполните, например:
      grep ^Swap /proc/1/smaps_rollup
    • Это даст вам представление о том, сколько памяти конкретный процесс использует и сколько из нее находится в состоянии свопа.

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

Оцените материал
Добавить комментарий

Капча загружается...