286 votes

comment savoir quels processus sont à l'origine dans linux?

Sous Linux, comment puis-je savoir quel processus est à l'aide de l'espace de swap plus?

Tous les scripts/liens apprécié..

330voto

lolotux Points 1521

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 (vous devez exécuter ce qu' root pour obtenir des résultats exacts):

#!/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
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 Swap $DIR/smaps 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"

115voto

David Holm Points 6165

Exécutez le haut , puis appuyez sur " O " (la lettre majuscule o), suivi par 'p' puis 'enter'. Maintenant, les processus doivent être triés en fonction de leur pagination.

Voici une mise à jour que ma réponse originale à cette question n'est pas de fournir une réponse exacte pour le problème comme l'a souligné dans les commentaires. À partir de la htop FAQ:

Il n'est pas possible d'obtenir la taille exacte de servir de l'espace de swap de processus. Top des faux cette information en faisant SWAP = VIRT - RES, mais ce n'est pas une bonne mesure, parce que d'autres choses telles que la mémoire vidéo compte sur VIRT (par exemple: top dit mon processus de X est l'aide de 81M de swap, mais il rend également compte de mon système dans son ensemble est à l'aide de seulement 2M de swap. Donc, je ne vais pas ajouter un semblable Swap colonne de htop parce que je ne connais pas un moyen fiable pour obtenir cette information (en fait, Je ne pense pas qu'il soit possible d'obtenir un nombre exact, en raison de la communauté pages).

58voto

j3nda Points 321

Voici une autre variante du script (vous devez exécuter ce 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}/";

10voto

Ronny Vindenes Points 1685

Ce n'est pas tout à fait clair si vous voulez dire que vous voulez trouver le processus qui a le plus de pages de sortie ou processus qui a causé le plus de pages pour être échangé.

Pour le premier, vous pouvez exécuter top et de l'ordre de swaps (appuyez sur 'Op'), pour le second point, vous pouvez exécuter vmstat et de regarder pour les non-zéro entrées pour le "si".

7voto

Amol Kulkarni Points 21

La commande top contient également un champ pour afficher le nombre de défauts de page pour un processus. Le processus avec le maximum de défauts de page serait le processus qui est la permutation de plus. Pour de longues démons, il pourrait être qu'ils engagent un grand nombre de défauts de page au début et le nombre n'augmente pas plus tard. Nous avons donc besoin d'observer si des défauts de page est en augmentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X