Voici un petit script bien pratique pour trouver quel process lancé par quelle ligne de commande utilise la SWAP de votre serveur.
(Pour savoir si votre serveur utilise la SWAP vous pouvez utiliser un outil comme htop)
Ouvrez un fichier getswap.sh avec vi ou autre et ajouter ces lignes:
#!/bin/bash # Get current swap usage for all running processes # Usage: ./getswap.sh | sort -n -k 5 # Erik Ljungstrom 27/05/2011 SUM=0 OVERALL=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` PROGPATH=`cat /proc/$PID/cmdline` 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 - $PROGPATH)" let OVERALL=$OVERALL+$SUM SUM=0 done echo "Overall swap used: $OVERALL" |
Pour afficher les process lancez le avec la ligne de commande suivante:
les options -n et -k de sort vont respectivement trier par ordre numérique la 5eme colone (quantité de swap utilisée)
./getswap.sh | sort -n -k 5 |
Ce qui donne:
... PID=854 - Swap used: 1356 - (php-cgi - /usr/local/bin/php-cgi) PID=2107 - Swap used: 1948 - (hald - hald) PID=11720 - Swap used: 2604 - (scrapy - /home/scrpamanga/.virtualenvs/scrpamanga/bin/python26/home/scrpamanga/.virtualenvs/scrpamanga/bin/scrapy crawl wikipedia) PID=30152 - Swap used: 4004 - (supervisord - /usr/bin/python/usr/bin/supervisord-csupervisor.ini) PID=2791 - Swap used: 7188 - (yum-updatesd - /usr/bin/python-tt/usr/sbin/yum-updatesd) |
Dans notre exemple on voit qu’un process (11720) Fait swapper le système, après une plus grand investiguation un problème a été trouvé dans le script, consommant beaucoup et saturant la mémoire système obligeant ce dernier à swapper.