# [Swap] comment connaitre le process qui swap

## jr

Bonjour,

j'ai un serveur avec un top moyen de ce type sur une gentoo :

Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie

Cpu(s):  8.2%us,  0.5%sy,  0.0%ni, 90.8%id,  0.2%wa,  0.0%hi,  0.3%si,  0.0%st

Mem:   3972092k total,  2693712k used,  1278380k free,   253140k buffers

Swap:   522104k total,    37484k used,   484620k free,   895708k cached

uname -a: 2.6.21.5-grsec-xxxx-grs-ipv6-64 #6 SMP x86_64 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz GenuineIntel GNU/Linux

Comme on peut le voir j'ai du swap utilisé (36mo - fixe ne bouge jamais). Y a t'il une commande qui permet de savoir quel process utilise du swap disque ? 

Comme j'ai encore de la mem de libre, je ne comprends pas ce besoin de swappé, surtout pour cette petite taille.

Merci,

Jérémy

----------

## Scullder

Salut, 

En fait, dans certains cas, le système fait le choix de mettre en swap automatiquement les données en ram peu/pas utilisées.

Tu peux changer ce comportement en changeant la swappiness, regarde le point 5 de ce topic :

https://forums.gentoo.org/viewtopic.php?p=1210748

----------

## Magic Banana

Le noyau swappe les pages les moins utilisées. Bref, ce n'est pas une application qui swappe mais l'ensemble des applications qui ne tiennent pas en RAM. Tu peux connaître l'espace mémoire des 10 commandes occupant le plus de mémoire de cette façon :

```
$ ps -eo %mem,comm | sort -rn | head
```

Et merde... encore 2 chatons sont morts !  :Laughing:  

----------

## YetiBarBar

 *Magic Banana wrote:*   

> Et merde... encore 2 chatons sont morts !  

 

Je m'en fout, j'ai ma carte au CCC ...

Plus sérieusement, dès lors qu'un processus a écrit dans la swap (ce qui peut arriver si tu dépasses à un instant t de 36 Mo ta ram), le système met des données en cache dans cette swap et ne libère pas la mémoire si il n'en a pas besoin, même si le programme qui utilisait ces données vient à mourrir (par une fermeture ou un crash).

Cette mise en cache n'a pas vraiment d'incidence sur les performances de ton système puisque les données qui y sont mises ne sont que rarement accédées voire probablement jamais dans ton cas.

Si tu utilisais réellement ton swap, tu verrais en observant la sortie de top des pics très fréquent à >90% en temps wa pour ton cpu

Quand à savoir quel processus a mis ses données (plus exactement, le noyau a mis les données), j'en ai franchement aucune idée ...

----------

## DuF

Je me permets juste de préciser quelques points, le fait d'avoir le wa > à 90% pour la CPU ne signifie pas que l'on swap, mais indique simplement le temps que la CPU attends pour des traitements disques. Cela peut être du swap, mais bien souvent c'est surtout lorsqu'on fait des lectures/écritures un peu violentes sur une machine pas adaptée.

Ce qui est important de regarder avec le swap, ce n'est pas tant qu'il soit utilisé/sollicité à un instant T, mais c'est qu'il le soit régulièrement. Si c'est le cas, alors il y a un défaut de mémoire vive sur la machine ou un process qui a des problèmes de mémoire (fuite, etc.)...

Pour réellement observé si tu as du swap utilisé, le plus simple c'est de lancer une commande type vmstat avec un intervalle de temps de 5s et de voir si tu as des choses dans les colonnes si/so (swap in => quantité de mémoire swappé depuis le disque/swap out => quantité de mémoire swappé vers le disque) car là dans ce cas, ça voudra dire que tu utilises réellement du swap et que tu as un défaut de mémoire.

A première vue, dans ton cas, si tes 36Mo ne bougent pas, et bien pas d'inquiétude, c'est le système qui à un instant T a estimé qu'il avait besoin de les copier (par exemple lors d'une montée en charge, ouverture de service, etc.) mais qu'en régime de plateau les ressources sont suffisantes.

Sinon, il n'est pas possible de savoir quel processus met ses données en swap, car ce n'est pas lui qui choisit. Comme l'indique YetiBarBar c'est le noyau qui décide.

Dans ton cas, ce qui est étonnant, c'est le fait qu'un peu de swap soit utilisé alors qu'il reste de la mémoire libre, il faudrait donc observer comment cela se passe au boot de la machine car c'est certainement la remarque de Scullder qui explique le mieux cette éventualité. De toute façon on voit bien que ta machine a suffisamment de mémoire, vu la mémoire libre déjà, mais aussi par les buffers plutôt conséquent et le cache disque plus qu'important (si le système se sert autant en cache disque c'est que la mémoire "applicative" est relativement peu consommatrice).

Bien prendre en compte aussi, comme le dit YetiBarBar que le système ne va pas libérer la mémoire (swap ou non) tant que des processus n'en ont pas besoin, donc à partir que tes 36Mo sont apparus, ils ne disparaitront pas de si tôt  :Smile: 

EDIT : j'ai corrigé une petite coquille dans le dernier paragraphe (:s/cache/swap/) ce qui corrige le sens de ma remarque (qui du tout était totalement fausse avant). Mais bon il était tard...   :Razz: Last edited by DuF on Thu Jan 17, 2008 10:40 am; edited 1 time in total

----------

## ghoti

 *DuF wrote:*   

> Ce qui est important de regarder avec le swap, ce n'est pas tant qu'il soit utilisé/sollicité à un instant T, mais c'est qu'il le soit régulièrement. Si c'est le cas, alors il y a un défaut de mémoire vive sur la machine ou un process qui a des problèmes de mémoire (fuite, etc.)...

 

+1 !

On pourrait même ajouter que s'il n'y avait pas eu de partition swap, le système n'aurait probablement eu aucune difficulté pour loger ces 36 malheureux Mo en RAM en rognant simplement un peu d'espace sur le cache de données !

Ce type de phénomène résulte, justement, des sombres arcanes du swappiness ...

----------

