PostHeaderIcon 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 😉

 

image_print

4 réponses à to “Afficher la liste des processus qui utilisent le SWAP”

  • Fabien says:

    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 !

  • Poil says:

    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 »

  • Jonas says:

    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 »

Laisser un commentaire