web-dev-qa-db-fra.com

Free RAM disparaît - Fuite de mémoire?

freeindique que 1,5G a été utilisé RAM (8G RAM, Ubuntu 12.04 avec lightdm et le bureau plasma, une fenêtre konsole étant ouverte). Ayant les applications en cours d'exécution que j'utilise, il ne consomme toujours pas plus de 2G. Cependant, si le système fonctionne pendant quelques jours, de plus en plus de mon RAM libre disparaît - sans apparaître dans la liste des applications utilisées: alors que smem --pie=name rapporte moins de 20% d’utilisations (et 80% d’entre elles étant disponibles), ), tout le reste dit différemment. free -m, par exemple, indique le jour 7 environ:

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(pour que vous puissiez voir, ce ne sont pas les tampons ou le cache). Aujourd'hui, cela s'est finalement terminé avec le crash complet du système: le gestionnaire de fenêtres avait disparu, des applications "suspendues dans les airs" (sans cadre) et une fenêtre contextuelle m'avertissant de "trop ​​de fichiers ouverts". Rapports Syslog:

kernel: [856738.020829] VFS: file-max limit 752838 reached

J'ai donc fermé les applications que je pouvais fermer et j'ai tué X à l'aide de Ctrl-Alt-backspace. X a ensuite essayé de revenir avec failSafeX, mais n'a pas réussi à le faire car il ne pouvait plus détecter sa configuration. Alors je suis passé à une console en utilisant Ctrl-Alt-F2, j'ai capturé toutes les informations auxquelles je pouvais penser (vmstat, free, smem, proc/meminfo, lsof, ps aux) et j'ai finalement redémarré. X est encore venu avec failSafeX; cette fois, je lui ai dit de "récupérer de ma configuration sauvegardée", puis je suis passé à une console et utilisé avec succès startxpour faire apparaître l'environnement graphique.

Je n'ai aucune idée réelle de la cause de ce problème - bien que cela doive avoir à voir soit avec X lui-même, soit avec certains processus utilisateur exécutés sous X - car après la suppression de X, la sortie free -m ressemblait à ceci:

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(~ 3,5 Go en cours de libération) - à comparer avec la sortie après un nouveau départ:

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

memstat -u fournit deux autres sorties utiles. Peu avant l'accident:

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

Après avoir tué X:

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

Et après un redémarrage, de retour dans X:

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

File System Usage for one weekKernel / CPU usage for one week

Edit: Je viens d'ajouter deux graphiques de mon système de surveillance. Intéressant à voir: chaque fois qu’il y a un "saut" dans la consommation de mémoire, les pics de processeur aussi. Je viens juste de le trouver maintenant - et cela me rappelle un autre indicateur pointant vers X lui-même: Souvent, lorsque je retournais sur ma machine pour déverrouiller l’écran, je trouvais que quelque chose s’avérait très lourd sur mon processeur. En vérifiant avec topname__, il s’est toujours avéré être /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none.

Donc, après cette longue explication, enfin mes questions:

  1. Quelles pourraient être les causes possibles?
  2. Comment puis-je mieux identifier les processus/applications impliqués?
  3. Quelles mesures pourraient être prises pour éviter ce problème - à moins de redémarrer la machine tous les X jours?

J'utilisais la version 8.04 (Hardy) pendant environ 5 ans sur mon ancienne machine, je n'avais jamais expérimenté la même chose (toujours plus de 100 jours de disponibilité, avant de redémarrer, par exemple, pour les mises à jour du noyau). C'est maintenant une nouvelle machine complète avec une nouvelle installation de 12.04 . Au cas où cela serait important, quelques spécifications:

AMD A4-3400 APU avec Radeon (tm) HD Graphics, à l'aide du pilote ATI/radeon à code source ouvert (de sorte qu'aucun fglrx n'est installé), 8 Go de RAM, WDC WD1002FAEX-0 disque dur (1 To), Asus F1A75-V Evo carte mère. Ubuntu 12.04 64 bits avec KDE4/Plasma. Les applications généralement ouvertes de manière plus ou moins permanente incluent Evolution, Firefox, konsole (environ 4 onglets dans Midnight Commander), et LibreOffice - plus occasionnellement Caliber, Gimp et Moneyplex (logiciel bancaire que j'utilise depuis près de 20 ans maintenant, dans une version qui a bien fonctionné sur Hardy).

Edit: Aujourd'hui, j'ai trouvé l'un des "méchants": le KDE4s plasma-desktop. La mémoire utilisée était à nouveau jusqu’à 5 Go, lorsque j’ai fait un killall plasma-desktop && plasma-desktop. Cela a libéré 1,3 Go de RAM! psdit:

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

Alors, où sont passés ces 1,3 Go? La différence entre ces valeurs, si additionnées, s'élève à 96 Mo - et non à 1,3 Go.

Et cela ne peut être qu'une partie, car 3,7 Go sont encore utilisés (ils devraient être inférieurs à 2 Go). J'ai surveillé cela au cours des 6 derniers jours à l'aide de plusieurs outils: la mémoire utilisée (sans parler de cache ni de mémoire tampon) augmente lentement mais régulièrement. Même si je ne suis pas à mon bureau pour exécuter quoi que ce soit ...

En ce qui concerne la surveillance des processus avec des fichiers ouverts, j’utilise actuellement le 1-liner suivant (j’adore Shell et surtout le bash) pour obtenir le top 5:

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

Commandez ici en 4 lignes pour une meilleure lisibilité. Rien d’autre pour le moment - sauf que Skype n’aime pas avoir la connexion Internet rompue. Chaque déconnexion provoque une légère augmentation de ses fichiers ouverts, mais rien d’exceptionnel. D'autre part, il semble que le plasma en soit également responsable:

VFS usage (2 days)

Voir la chute des poignées de fichier à la fin? C'était le redémarrage du plasma.

11
Izzy
  1. Le grand nombre de fichiers ouverts est un bon indice que quelque chose ne va pas. Je pense que ce serait un démon système KDE.

  2. Ouvrez une console et lancez "top". Puis utilisez <et> pour changer la colonne de tri en VIRT ou RES et voir quels programmes utilisent le plus de mémoire. Une fuite de mémoire apparaîtra comme une utilisation de mémoire virtuelle considérablement gonflée, car une fois que le pointeur sur la mémoire perdue sera perdu, il ne sera plus utilisé et sera échangé. Lancez également "lsof" et recherchez un processus avec beaucoup de fichiers ouverts, car cela semble vraiment être une fuite de descripteur de fichier.

  3. Repérez le programme et signalez un bogue.

6
Alistair Buxton

Je pense que c'est normal système Behaivor. Très probablement, tout va bien.

Vous pouvez lire ce brillant article (Linux mange mon bélier) pour comprendre comment Linux gère votre bélier et pourquoi il n’ya pas lieu de s’inquiéter:

http://www.linuxatemyram.com/

0
gemue2010