Sous Linux, comment puis-je savoir quel processus est à l'aide de l'espace de swap plus?
Tous les scripts/liens apprécié..
Sous Linux, comment puis-je savoir quel processus est à l'aide de l'espace de swap plus?
Tous les scripts/liens apprécié..
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"
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).
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}/";
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".
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 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.