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
Modification du script pour gestion sous redHat des null bytes et soucis d’operande pour lire 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 | grep « ^/proc/[0-9] »); do
PID=$(echo « $DIR » | cut -d / -f 3)
PROGNAME=$(ps -p « $PID » -o comm –no-headers)
PROGPATH=$(cat « /proc/$PID/cmdline » | tr -d ‘\0’) # Remove null bytes
# Check if smaps file exists
if [ -e « $DIR/smaps » ]; then
# Extract swap value using awk
SWAP=$(awk ‘/Swap/{sum+=$2} END{print sum}’ « $DIR/smaps »)
# Check if SWAP is not empty before adding it to SUM
if [ -n « $SWAP » ]; then
SUM=$((SUM + SWAP))
echo « PID=$PID – Swap used: $SWAP – ($PROGNAME – $PROGPATH) »
fi
fi
done
echo « Overall swap used: $SUM »