web-dev-qa-db-fra.com

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

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

             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 tous les après-midi et qu'il est publié de nuit. La demande n'est pas la même tous les jours et commence à des heures différentes. C'est donc assez aléatoire, à l'exception de la frontière floue "après-midi-nuit".

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 diminue progressivement.

Maintenant, j'ai les questions suivantes:

  1. Comment voir quels processus utilisent swap?
  2. Pourquoi préfère-t-il échanger plutôt que de prendre un peu de mémoire du cache?
30
Konrad Garus

Les schémas d'utilisation des échanges que vous décrivez ne paraissent pas surprenants. Ils sont compatibles 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 en 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 utilisée par chaque processus dans topou htopname__. Aucune utilisation d’échange d’échange par défaut, mais les deux peuvent être configurés sur (top: appuyez sur fet activez la colonne SWAPname__; htop: appuyez sur F2, ajoutez la colonne NSWAPname__). Vous pouvez obtenir plus d'informations sur un processus particulier avec cat /proc/12345/vmstat12345 est l'ID du processus. Notez que "la quantité d'échange utilisée par un programme" n'est pas complètement définie, certaines pages étant partagées par plusieurs processus.

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

25
Gilles

Sans interrogation ni analyse des sorties d'outils tels que vmstatname__, freeet topname__, le meilleur endroit pour regarder pourrait être les crontabs de l'utilisateur racine ou d'autres utilisateurs du système. Si la charge générale du système augmente de manière fiable à un moment donné, il existe probablement un processus cron qui crée un besoin de ressources. Dans le cas contraire, vous pouvez toujours créer un utilitaire de journalisation dans les ghettos jetables avec l'utilitaire scriptname__, qui enregistre simplement tout ce qui est transmis à STDOUT.

Donc, si j’avais besoin de faire un script jetable unique pour récupérer le résultat en vue d’une inspection ultérieure, je taperais dans un terminal:

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

et le lendemain matin, supprimez les deux invocations scriptet faites correspondre le résultat de topet freename__

encore une fois c'est une approche ghetto mais ça sonne comme si vous n'aviez besoin que d'un seul coup

vous aimerez peut-être aussi lire le guide d'échange d'ubunt

0
Brad Clawsie

Avec htop v1.01, j'ai appuyé sur "S" pour ajouter la colonne NSWAP au lieu de "F2" (comme suggéré par Gilles), puis Columns> Available Columns> et F5 pour l'ajouter.

enter image description here

0
Genjo

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

https://stackoverflow.com/a/718000078/1442301

En résumé, des outils tels que top ou htop ne fournissent aucune information précise sur l’utilisation de swap. Vous devriez plonger dans le dossier /proc (dans le pseudo fichier /proc/$PID/smaps) pour obtenir des informations plus précises.

Le post mentionné ci-dessus contient un court script Shell pour que cette information soit répercutée de manière agréable.

0
Xavier