web-dev-qa-db-fra.com

Comment savoir quel processus utilise swap?

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.

9
Wiky L

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"
8
Rahul Tripathi

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
23
adrianlzt

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/

2
user2336876

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.

0
h0tw1r3