Qu'est-ce qui utilise mon swap (Ubuntu)?

30

J'ai un serveur Ubuntu 8.04 qui exécute une base de données et un tas de serveurs d'applications Java. Sa configuration et son utilisation de la mémoire sont les suivantes:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

J'ai remarqué que le swap monte chaque après-midi et est libéré quelque temps dans la nuit. La demande n'est pas la même tous les jours et démarre à des moments différents. C'est donc assez aléatoire, à l'exception de la frontière floue "après-midi".

La charge sur cette machine varie au cours de la journée. Il est très bas entre minuit et 6h-7h, beaucoup plus élevé (mais stable) jusqu'à 18h-20h, puis baisse progressivement.

J'ai maintenant les questions suivantes:

  1. Comment savoir quels processus utilisent le swap?
  2. Pourquoi préfère-t-il échanger plutôt que de prendre de la mémoire dans le cache?
Konrad Garus
la source

Réponses:

25

Les modèles d'utilisation de swap que vous décrivez ne semblent pas surprenants. Ils sont cohérents avec certains processus en cours d'exécution ayant des pages rarement utilisées. Pendant la journée, en raison de la forte activité, les pages rarement utilisées sont presque toujours dans le swap. La nuit, il y a plus de place pour eux dans la RAM.

Vous pouvez avoir un aperçu de la quantité de mémoire de différents types que chaque processus utilise dans topou htop. Aucun ne montre l'utilisation de swap par défaut, mais les deux peuvent être configurés pour (haut: appuyez fet allumez la SWAPcolonne; htop: appuyez F2, ajoutez la NSWAPcolonne). Vous pouvez obtenir plus d'informations sur un processus particulier avec cat /proc/12345/vmstatoù se 12345trouve l'ID de processus. Notez que «combien de swap utilise un programme» n'est pas complètement bien défini, car certaines pages sont partagées par plusieurs processus.

Il existe deux principaux types de concurrents pour la RAM: la mémoire de processus (qui peut être échangée) et les caches de disque (qui peuvent être relus à partir d'un fichier). Il n'y a aucune raison de prioriser toujours la mémoire de processus sur les caches de disque: il est préférable d'échanger une partie rarement utilisée de la mémoire de processus plutôt que de continuer à lire un fichier en mémoire encore et encore. Les chiffres que vous donnez, avec environ la moitié (disons 30% à 70%) de la mémoire consacrée aux caches de disque, sont typiques pour les systèmes qui ont une quantité raisonnable de RAM pour les tâches qu'ils sont censés faire.

Gilles 'SO- arrête d'être méchant'
la source
6
Je ne trouve pas de NSWAPcolonne (Ubuntu 16.04: /).
jjmontes
1
@jjmontes Il a été supprimé . Je ne sais pas pourquoi.
Gilles 'SO- arrête d'être méchant'
La FAQ htop indique que l'auteur ne pense pas qu'il soit possible de rapporter avec précision l'utilisation du swap et que la métrique du haut est inexacte.
Oliver Evans
0

Sur StackOverflow, il existe déjà une excellente réponse à votre première question ("Quel processus utilise réellement le swap?").

/programming//a/7180078/1442301

En bref, des outils comme topou htopne fournissent pas du tout d'informations précises sur l'utilisation du swap. Vous devriez plonger dans le /procdossier (dans le pseudo fichier /proc/$PID/smaps) pour obtenir des informations plus précises.

Le message mentionné ci-dessus contient un court script shell pour obtenir ces informations en écho d'une manière agréable.

Xavier
la source
0

Avec htop v1.01, j'Enfoncé « S » pour ajouter la NSWAPcolonne au lieu de « F2 » (comme Gilles suggéré), puis Columns> Available Columns> et F5de l' ajouter.

entrez la description de l'image ici

Genjo
la source
J'ai htop 2.0.1 et je ne vois pas l'option NSWAP :(
Adam
1
@Adam Le mainteneur ne souhaite plus afficher cette colonne car il n'existe aucun moyen fiable d'obtenir ces informations; voir Pourquoi htop ne comporte-t-il pas de colonne SWAP, comme top?
Genjo
0

Sans interroger ni analyser les sorties d'outils tels que vmstat, freeet top, le meilleur endroit où chercher pourrait être les analyses croisées de l'utilisateur root ou d'autres utilisateurs du système. Si la charge générale sur le système augmente de manière fiable à un certain moment, il y a de fortes chances qu'il existe un processus dans cron qui crée le besoin de ressources. Sinon, vous pouvez toujours créer un utilitaire de journalisation du ghetto avec l' scriptutilitaire, qui enregistre simplement tout ce qui va à la STDOUT.

Donc, si j'avais besoin de faire un script jetable unique pour attraper la sortie pour une inspection ultérieure, dans un terminal, je taperais:

script /tmp/free.txt

et alors

while (true); do date; free; sleep 30; done

et dans un autre terminal

script /tmp/top.txt

et alors

while (true); do date; top -n 1; sleep 30; done

puis le lendemain matin, tuez les deux scriptinvocations et faites correspondre la sortie de topetfree

encore une fois, c'est une approche du ghetto, mais il semble que vous n'avez besoin que d'une seule

vous aimerez aussi lire le guide de swap ubuntu

Brad Clawsie
la source