Получение информации о том кто использует Swap.
Бывают ситуации когда нужно посмотреть кто использует Swap и в каком объеме. К сожалению, готовой программы ненашлось, а информацию получить нужно. На выручку как всегда приходит bash.Есть несколько известных фактов.
- в /proc доступна информация по всем запущенным процессам;
- если заглянуть в /proc/$pid/status то можно увидеть использование памяти процессом с указанным pid;
- для каждого процесса, можно увидеть строку VmSwap, это объем данных помещенных в подкачку.
- Таким образом чтобы получить информацию, нужно подсчитать все вхождения Swap для всех процессов.
1. Нужно получить все каталоги процессов в /proc
# find /proc/ -maxdepth 1 -type d |grep -E "[0-9]+"
2. Нужно подсчитать использование свопа в для одного процесса
# swap=$(grep VmSwap $dir/status 2> /dev/null |awk '{print $2}')
3. И получить имя процесса
# ps h -p $pid -o comm
Теперь скрещиваем полученные команды в скрипт
# vi bin/getswap.sh
#!/bin/sh
# Get current swap usage for all running processes
for dir in $(find /proc/ -maxdepth 1 -type d |grep -E "[0-9]+"); do
pid=$(echo $dir |cut -d/ -f3)
cmd=$(ps h -o comm -p $pid)
swap=$(grep VmSwap $dir/status 2> /dev/null |awk '{print $2}')
if [ ! -z $swap ] && [ $swap -ne 0 ]; then
echo "pid: $pid command: $cmd - SwapUsed: $swap KB"
fi
done |sort -nk5 |column -t
Проверяем работу
# bin/getswap.sh
pid:7068 command:dmeventd - SwapUsed: 180148 KB
pid:7022 command:nginx - SwapUsed: 199088 KB
pid:7595 command:glusterfsd - SwapUsed: 239624 KB
Вот и все.
На главную "Virtualizing Linux"
Спасибо за скрипт. Предлагаю немного усовершенствовать:
ОтветитьУдалитьif [ ! -z $swap ] && [ $swap -ne 0 ]; then
Т.к. нас не интересуют процессы, которые не используют swap.
Спасибо! добавил изменения.
ОтветитьУдалить