Afficher la liste des processus qui utilisent le SWAP
Article publiée le 9 Octobre 2013
Il y a quelque jour j'ai eu un gros problème de SWAP sur une de mes machines Linux. Mon collègue a trouvé un script très utile qui permet d'afficher tous les processus utilisant le SWAP:
#!/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"
Si vous voulez connaitre les processus qui SWAP le plus:
./getswap.sh | sort -n -k 5
Exemple de résultat du scripts.:
Enjoy 🙂
Ce script ne fonctionne que pour les distributions RedHat/Centos/Fedora. Une petite modif sera certainement nécessaire si vous êtes utilisateurs d'une autre distrib 😉
J’ai essayé sur une SLES 11 SP2 et j’ai du modifier 2-3 trucs :
let OVERALL=$OVERALL+$SUM => OVERALL=$(($OVERALL+$SUM))
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk ‘{ print $2 }’` => for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk ‘{ print $2 }’`
Merci pour le script ça peut être utile !
En bash pure
#!/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 /proc/[0-9]*; do
PID=${DIR##*\/}
PROGNAME=$(ps -p ${PID} -o comm –no-headers)
PROGPATH=$(cat /proc/${PID}/cmdline)
for SWAP in $(awk ‘{ /Swap/ print $2}’ ${DIR}/smaps 2>/dev/null);do
SUM=$(( SUM + SWAP ))
done
echo « PID=$PID – Swap used: ${SUM} – (${PROGNAME} – ${PROGPATH}) »
OVERALL=$(( OVERALL + SUM))
SUM=0
done
echo « Overall swap used: $OVERALL »
http://web.quakelive.fr/tmp/swap.sh