Comment savoir si les processus utilisent l'espace de swap?

10

J'ai un serveur Linux supérieur rapporte environ 9 Go de swap utilisé: Haut

Mais je ne peux pas comprendre où il utilise le swap, certains résultats de Google indiquent que top- Ocommad suivi paffichera l'utilisation du swap par processus. Mais comme le montre l'image ci-dessus, une brève somme de la colonne SWAP montre que> 10 Go de swap sont utilisés, alors d'où vient le chiffre de 9 Go pour l'utilisation du swap?

Top rapporte qu'environ 96492 Ko de RAM sont utilisés par les tampons. Y a-t-il quelque chose que je puisse faire pour l'utiliser, au lieu d'utiliser le swap?

masque de sécurité
la source
1
top (selon la page de manuel) calcule SWAP comme étant une utilisation RAM virtuelle - PHYSIQUE. Pas tout à fait exact de mes expériences.
lornix

Réponses:

6

Il est possible que plusieurs programmes utilisent la même zone de swap, il sera donc signalé deux fois.

Il n'est pas nécessaire d'essayer de dire à Linux d'utiliser la zone tamponnée au lieu de swap - il est déjà très intelligent sur ce qu'il fait. Si vous utilisez 9 Go de swap et 9 Go de tampon, c'est une bonne chose ... cela signifie que Linux se rend compte que 9 Go de trucs chargés en mémoire ne sont pas utilisés activement, il est donc plus efficace de les échanger sur le disque afin que votre le tampon peut s'agrandir et améliorer vos performances.


EDIT: Si vous ajoutez toute la mémoire utilisée par chaque processus, vous obtiendrez également bien plus que votre RAM physique. Cela est dû aux bibliothèques partagées utilisées par plusieurs programmes, ainsi qu'à la façon dont Linux gère les fourches - il ne duplique pas l'intégralité du programme en mémoire, il ne fait que dupliquer les parties qui diffèrent entre les deux instances. Dans certains cas, la mémoire vidéo peut être affichée dans le cadre d'un processus X - je pense que les anciennes cartes Voodoo3 l'ont fait. Il peut y avoir d'autres cas où la mémoire "fantôme" peut également apparaître en haut.

Flimzy
la source
Je ne pense pas que les bibliothèques partagées devraient être considérées comme des swaps, car au démarrage du système, aucune utilisation de swap mais de nombreuses bibliothèques partagées sont déjà chargées. Quoi qu'il en soit, je vois que mon système utilise environ 9 Go de partition de swap, je veux juste savoir quel processus a utilisé la plupart du swap (exclure les bibliothèques de partage, le fichier de mappage de mémoire ...)
secmask
3

L'analyse du sous-répertoire / proc fonctionne:

En tant que script bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

La sortie pourrait être triée Hi-Lo par des tuyaux pour trier:

{blah}| sort -rn

Bien sûr, réécrivez cela dans votre langue de la semaine préférée comme vous le souhaitez. Mon Awk-fu n'est pas fort.

(couper-coller)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr
lornix
la source
1

Autre moyen:

smem -s swap -r
Kirill Feoktistov
la source