Как узнать, какие процессы используют пространство подкачки в Linux? - PullRequest
227 голосов
/ 26 января 2009

В Linux, как узнать, какой процесс использует пространство подкачки?

Ответы [ 15 ]

2 голосов
/ 26 января 2009

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

Подкачка - это функция увеличения объема памяти при активном использовании, чем установлено, поэтому обычно трудно обвинить ее в одном процессе. Если это постоянная проблема, лучшим решением будет установка дополнительной памяти или внесение других системных изменений.

1 голос
/ 30 мая 2018

Дает итоги и проценты для процесса с использованием свопа

smem -t -p

enter image description here

Источник: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/

1 голос
/ 01 сентября 2015

iotop - очень полезный инструмент. Это дает живую статистику ввода / вывода и использования подкачки для процесса / потока. По умолчанию он показывает для потока, но вы можете сделать iotop -P, чтобы получить информацию о процессе. Это не доступно по умолчанию. Возможно, вам придется установить через rpm / apt.

1 голос
/ 26 января 2009

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

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

0 голосов
/ 13 мая 2019

Вот версия, которая выводит то же самое, что и скрипт @loolotux, но намного быстрее (хотя и менее читабелен). Этот цикл занимает около 10 секунд на моем компьютере, моя версия занимает 0,019 с, что имело значение для меня, потому что я хотел превратить его в страницу cgi.

    join -t / -1 3 -2 3 \
    <(grep VmSwap /proc/*/status  |egrep -v '/proc/self|thread-self' | sort -k3,3 --field-separator=/ ) \
    <(grep -H  '' --binary-files=text /proc/*/cmdline |tr '\0' ' '|cut -c 1-200|egrep -v '/proc/self|/thread-self'|sort -k3,3 --field-separator=/ ) \
    | cut -d/ -f1,4,7- \
    | sed 's/status//; s/cmdline//' \
    | sort -h -k3,3 --field-separator=:\
    | tee >(awk -F: '{s+=$3} END {printf "\nTotal Swap Usage = %.0f kB\n",s}') /dev/null
...