Как найти процесс, что использует больше всего swap или как проверить кто использует swap
Часто, особенно на нагруженных серверах, приходиться замечать проблему с тем, что очень сильно используется swap. Следовательно, если проверить, какой процесс использует оперативную память, мы можем тем же top или atop, выполнив сортировку отображения по нагрузке на память, то с отслеживанием точного процесса, который использует swap возникают трудности. Еще в 2011 году нам с этой проблемой пытался помочь справиться Erik Ljungstrom и очень даже не безуспешно. Так, он сделал скрипт в три с половиной строчки, который отлавливает нужные нам процессы, использующие swap. Мы, в свою очередь, немножечко видоизменили данный скрипт, для более удобной работы, так сказать, в трех с половиной его строчках изменили три с половиной слова.
Собственно сама инструкция, как найти зловещий процесс, который использует swap:
1. Переходим в папку root:
cd /root/
2. Создаем файл getswap.sh
touch getswap.sh
3. В этот файл добавляем код, что ниже (используем редактор vim):
vim getswap.sh
Код, который добавляем в файл:
#!/bin/bash
SUM=0
MOST=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let MOST=$MOST+$SUM
SUM=0
done
echo "Most swap used: $MOST"
4. Добавим скрипту права на исполнение:
chmod +x getswap.sh
5. Запускаем наш скрипт с сортировкой по 5 столбцу и выводом 10 процессов, что более всего используют swap
sh /root/getswap.sh | egrep -v "Swap used: 0" |sort -rn -k 5 | head -n 10
Как итог, в консоли получим подобный вывод:
sh /root/getswap.sh | egrep -v "Swap used: 0" |sort -rn -k 5 | head -n 10
PID=43189 - Swap used: 522924 - (java )
PID=6668 - Swap used: 171676 - (mysqld )
PID=3392 - Swap used: 132164 - (hg )
PID=31398 - Swap used: 76676 - (java )
PID=5128 - Swap used: 43304 - (memcached )
PID=3102 - Swap used: 30068 - (beam.smp )
PID=25716 - Swap used: 4048 - (python )
PID=57113 - Swap used: 2620 - (ispmgr )
PID=10710 - Swap used: 2264 - (httpd )
PID=8688 - Swap used: 1380 - (config )
Ну вот мы и видим, что больше всего буйствует java-процесс под номером 43189. А просмотреть его более детально уже дело техники - или lsof по PID покажет детальный разрез процесса, или просто посмотреть на процесс ps aux | grep PID
HyperHost желает, чтобы Ваши сервера никогда не были загружены под завязку и сайты работали быстро и без проблем!