В данной заметке я покажу, как выявить процессы, которые в своей работе используютSWAP“. “SWAP” – это специальный раздел на диске или файл, в который операционная система перемещает отдельные блоки оперативной памяти в случае, когда оперативной памяти не хватает для работы приложений.

У меня на работе активно используется система мониторинга на базе “Nagios” и вот как раз ею был зафиксирован вот такой вот “Warning“.

Warning в системе мониторинга, уменьшается размер SWAP файла

Чтобы проанализировать данный “Warning” на предмет того какими процессами используется нужно в системе “Cent OS 6.4” создать вот такой скрипт следующего содержания:

Ниже командой выводит размер swap в системе:

[ekzorchik@db ~]$ free -m

total       used       free     shared    buffers     cached

Mem:         15949      15446        502          0         73       3040

-/+ buffers/cache:      12333       3615

Swap:         6015       5233        782

, но что делать дальше.

Создаем скрипт:

[ekzorchik@db2 ~]$ nano swap

#!/bin/bash

SCRIPT_NAME=`basename $0`;

SORT="kb";                 # {pid|kB|name} as first parameter, [default: kb]

[ "$1" != "" ] && { SORT="$1"; }

[ ! -x `which mktemp` ] && { echo "ERROR: mktemp is not available!"; exit; }

MKTEMP=`which mktemp`;

TMP=`${MKTEMP} -d`;

[ ! -d "${TMP}" ] && { echo "ERROR: unable to create temp dir!"; exit; }

>${TMP}/${SCRIPT_NAME}.pid;

>${TMP}/${SCRIPT_NAME}.kb;

>${TMP}/${SCRIPT_NAME}.name;

SUM=0;

OVERALL=0;

echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;

for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/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

if (( $SUM > 0 ));

then

echo -n ".";

echo -e "${PID}\t${SUM}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.pid;

echo -e "${SUM}\t${PID}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.kb;

echo -e "${PROGNAME}\t${SUM}\t${PID}" >> ${TMP}/${SCRIPT_NAME}.name;

fi

let OVERALL=$OVERALL+$SUM

SUM=0

done

echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;

echo;

echo "Overall swap used: ${OVERALL} kB";

echo "========================================";

case "${SORT}" in

name )

echo -e "name\tkB\tpid";

echo "========================================";

cat ${TMP}/${SCRIPT_NAME}.name|sort -r;

;;

kb )

echo -e "kB\tpid\tname";

echo "========================================";

cat ${TMP}/${SCRIPT_NAME}.kb|sort -rh;

;;

pid | * )

echo -e "pid\tkB\tname";

echo "========================================";

cat ${TMP}/${SCRIPT_NAME}.pid|sort -rh;

;;

esac

Делаем его исполняемым:

[ekzorchik@db2 ~]$ chmod +x swap

Запускаем:

[ekzorchik@db2 ~]$  sudo ./swap

…………………………..

Overall swap used: 5380916 kB

========================================

kB      pid     name

========================================

5298252 1625    mongod – Имя процесса и его PID (идентификатор) который активно использует swap

67200   1921    mysqld

2572    1643    memcached

2192    16705   memcached

1988    2065    osad

796     2036    qmgr

764     2027    master

720     2092    monit

656     919     udevd

648     602     udevd

644     2111    udevd

580     1661    sshd

536     1951    nrpe

476     2073    crond

424     1565    hald

404     1157    vmtoolsd

348     1425    rsyslogd

268     1717    mysqld_safe

204     1566    hald-runner

168     1594    hald-addon-inpu

160     1610    hald-addon-acpi

144     1409    auditd

128     1       init

124     1536    dbus-daemon

76      2116    mingetty

76      2114    mingetty

76      2109    mingetty

76      2107    mingetty

72      2112    mingetty

72      2105    mingetty

40      1444    mdadm

32      2083    rhnsd

Данным скриптом наглядно выводиться процесс который активничает со “SWAP“, что делать дальше, нужно уже анализировать его работу, проверить настроечные конфигурационные файлы и, конечно же уточнить у ответственного за данный процесс какой вид работы сейчас используется. Цель заметки достигнута, на этом всё и удачи, с уважением ekzorchik.

 

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru