GNU/Linux >> Tutoriels Linux >  >> Linux

Comment savoir quels processus utilisent l'espace d'échange sous Linux ?

Le meilleur script que j'ai trouvé est sur cette page :http://northernmost.org/blog/find-out-what-is-using-your-swap/

Voici une variante du script et aucune racine n'est nécessaire :

#!/bin/bash 
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo

SUM=0
OVERALL=0
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 VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

Utilisez smem

smem -s swap -r

Voici un lien qui vous explique à la fois comment l'installer et comment l'utiliser :http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Voici une autre variante du script, mais destinée à donner une sortie plus lisible (vous devez l'exécuter en tant que root pour obtenir des résultats exacts) :

#!/bin/bash

    # find-out-what-is-using-your-swap.sh
    # -- Get current swap usage for all running processes
    # --
    # -- rev.0.3, 2012-09-03, Jan Smid          - alignment and intendation, sorting
    # -- rev.0.2, 2012-08-09, Mikko Rantalainen - pipe the output to "sort -nk3" to get sorted output
    # -- rev.0.1, 2011-05-27, Erik Ljungstrom   - initial version


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
rm -fR "${TMP}/";

Exécutez haut puis appuyez sur O p Entrez . Désormais, les processus doivent être triés en fonction de leur utilisation de l'échange.

Voici une mise à jour car ma réponse d'origine ne fournit pas de réponse exacte au problème, comme indiqué dans les commentaires. À partir de la FAQ de htop :

Il n'est pas possible d'obtenir la taille exacte de l'espace de swap utilisé par un processus. Top falsifie cette information en faisant SWAP =VIRT - RES, mais ce n'est pas une bonne métrique, car d'autres éléments tels que la mémoire vidéo comptent également sur VIRT (par exemple :top dit que mon processus X utilise 81 M de swap, mais il signale également mon système dans son ensemble n'utilise que 2 Mo d'échange. Par conséquent, je n'ajouterai pas de colonne Swap similaire à htop car je ne connais pas de moyen fiable d'obtenir ces informations (en fait, je ne pense pas qu'il soit possible d'obtenir un nombre exact, car de pages partagées).


Linux
  1. Découvrez les processus orphelins de Linux

  2. Comment augmenter l'espace d'échange sous Linux

  3. Comment savoir ce qui utilise tout l'espace sur ma partition / ?

  4. Comment savoir quelle interface j'utilise pour me connecter à internet ?

  5. Comment trouver les fichiers qui occupent 80 % de l'espace sur un serveur Web Linux ?

Comment étendre l'espace d'échange à l'aide du fichier d'échange sous Linux

Comment savoir à quels groupes un utilisateur appartient sous Linux

Découvrez quels processus écoutent sur un port particulier sous Linux

Voici comment savoir quel environnement de bureau vous utilisez

Comment vérifier l'espace d'échange sous Linux

Comment trouver la version de Linux que vous utilisez