Il y a beaucoup de mémoire disponible (environ 4G) mais le swap est utilisé (200 + M) dans ma boîte Fedora.
Je me demande quel processus utilise swap. Comment puis-je le savoir.
ps et top affiche uniquement l'utilisation de la mémoire.
Merci d'avance.
De ici :
[a]/proc/meminfo - Ce fichier contient des statistiques sur l'utilisation de la mémoire sur sur le système. Free est utilisé pour indiquer la quantité de mémoire libre et utilisée (À la fois physique et swap) sur le système, ainsi que la mémoire partagée Et les tampons utilisés par le noyau. Vous pouvez également utiliser free, vmstat Et d’autres outils pour trouver la même information.
[b] /proc/$ {PID}/smaps,/proc/$ {PID}/status et/proc/$ {PID}/stat : Utilisez ces fichiers pour trouver des informations sur la mémoire, les pages et le swap utilisés par chaque processus utilisant son PID.
[c] smem - Cette commande (script python) rapporte l'utilisation de la mémoire avec mémoire partagée divisée proportionnellement.
Vous pouvez aussi consultersavoir ce qui utilise votre swap
#!/bin/bash
# Get current swap usage for all running processes
# 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`
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 )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
Amélioration de la commande cyberciti.biz pour afficher une réponse plus concise:
(echo "COMM PID SWAP"; for file in /proc/*/status ; do awk '/^Pid|VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | grep kB | grep -wv "0 kB" | sort -k 3 -n -r) | column -t
Un exemple de sortie:
COMM PID SWAP
dockerd 662 2736 kB
skypeforlinux 26865 1320 kB
NetworkManager 303 1112 kB
slim 392 1028 kB
redis-server 350 204 kB
Sur le /proc/'processPID'/status
, vous pouvez trouver cette information dans le champ VmSwap
.
Avec cette commande, vous pouvez lister tous les processus utilisant swap.
for file in /proc/*/status ;
do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file;
done
Référence: http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/
Voici comment utiliser awk pour produire une belle table triée par utilisation de swap:
awk 'function pr(){if (s ~ /^[1-9]/) print p,n,s;n="";p="";s=""}BEGIN{FS="\t *";OFS="\t"}/^Name:/{pr();n=$2}/^VmSwap:/{s=$2}/^Pid:/{p=$2}END{pr()}' /proc/*/status | sort -t $'\t' -k3 -n -r | column -t -s $'\t'
Basé sur la réponse de adrianlzt.