коментариев
Поделиться статьей:

Как найти процесс, что использует больше всего swap или как проверить кто использует swap

Аникей Александров 01.02.2016 на прочтение 2 минуты

Часто, особенно на нагруженных серверах, приходиться замечать проблему с тем, что очень сильно используется 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 желает, чтобы Ваши сервера никогда не были загружены под завязку и сайты работали быстро и без проблем!


Close Screen
Аникей Александров
Статей: 41
Оцените статью:


Спасибо за отзыв
Рейтинг: 5 из 5 Голосов: 2