disparait RAM libre - Fuite de mémoire?

11

Sur un système de frais a commencé, des freerapports sur 1.5G utilisés RAM (RAM 8G alltogether, Ubuntu 12.04 avec lightdm et de bureau à écran plasma, une fenêtre Konsole a commencé). Ayant les applications en cours d'exécution que j'utilise, il ne consomme toujours pas plus de 2G. Cependant, ayant le système en cours d' exécution pendant quelques jours, de plus en plus de mes disparait libres de RAM - sans apparaître dans la liste des applications utilisées: alors que des smem --pie=namerapports moins de 20% utilisé (et 80% étant disponible), dit tout le monde différemment. free -mpar exemple, des rapports sur le jour 7:

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

(Vous pouvez le voir, ce ne sont pas les tampons ou le cache). Aujourd'hui, cela a finalement pris fin avec le crash complet du système: le gestionnaire de fenêtres disparu, les applications "suspendues en l'air" (sans cadre) - et une fenêtre contextuelle m'informant de "trop ​​de fichiers ouverts". rapports Syslog:

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

Je fermai donc ces applications que je suis en mesure de fermer, et X à l' aide tuais Ctrl-Alt-Backspace. X a essayé de trouver à nouveau après avec failsafeX, mais n'a pas pu le faire car il ne pouvait plus détecter sa configuration. Donc , je suis passé à une console en utilisant les touches Ctrl-Alt-F2, capturé toutes les informations que je pouvais penser (vmstat, libre, smem, proc/meminfo, lsof, ps aux), et enfin redémarré. X nouveau venu avec failsafeX; cette fois , je dit à « remettre de ma configuration sauvegardée », puis passer à une console et utilisé avec succès startxpour afficher l'environnement graphique.

Je n'ai aucune idée de ce qui cause ce problème - bien que cela doive être lié à X lui-même ou à certains processus utilisateur exécutés sur X - car après avoir tué X, la free -msortie 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 libérés) - pour 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

Deux autres sorties utiles sont fournies par memstat -u. Peu de temps avant le crash:

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 en 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

Système de fichiers Utilisation pendant une semaine l'utilisation du noyau / CPU pendant une semaine

Edit: vient 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 CPU aussi. Je viens de le trouver en ce moment - et cela me rappelle un autre indicateur pointant vers X lui-même: souvent en revenant à ma machine et en déverrouillant l'écran, j'ai trouvé quelque chose qui faisait un travail lourd sur mon processeur. En vérifiant avec top, cela 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 mieux identifier les processus / applications impliqués?
  3. Quelles mesures pourraient être prises pour éviter ce comportement - à moins de redémarrer la machine tous les X jours?

J'exécutais 8.04 (Hardy) depuis environ 5 ans sur mon ancienne machine, n'ayant jamais connu la même chose (toujours plus de 100 jours de disponibilité, avant de redémarrer par exemple pour les mises à jour du noyau). Il s'agit maintenant d'une nouvelle machine complète avec une nouvelle installation de 12.04 . Au cas où cela compte, quelques spécifications:

APU AMD A4-3400 avec carte graphique Radeon (tm) HD, utilisant le pilote open-source ati / radeon (donc pas de fglrx installé), 8 Go de RAM, WDC WD1002FAEX-0 hdd (1 To), carte mère Asus F1A75-V Evo. Ubuntu 12.04 64 bits avec KDE4 / Plasma. Les applications ouvertes généralement de manière plus ou moins permanente incluent Evolution, Firefox, konsole (avec Midnight Commander à l'intérieur, environ 4 onglets) et LibreOffice - plus occasionnellement Calibre, Gimp et Moneyplex (logiciel bancaire que j'utilise déjà 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": KDE4s plasma-desktop. La mémoire utilisée était à nouveau jusqu'à 5 Go, quand 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ù étaient ces 1,3 Go? La différence entre ces valeurs, si elles sont 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 toujours utilisés (devraient être inférieurs à 2 Go). Je surveillais ce au cours des 6 derniers jours à l'aide de plusieurs outils: la mémoire utilisée (ne parle pas de cache et tampons) augmente lentement mais de façon constante. Même si je ne suis pas à mon bureau pour faire quoi que ce soit ...

En ce qui concerne les processus de suivi avec les fichiers ouverts, j'utilise actuellement le 1-liner suivant (shell amour I et en particulier 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é. Pas grand-chose encore de là - sauf que Skype ne aime pas avoir la mauvaise connexion Internet. Chaque déconnexion provoque une légère augmentation de ses fichiers ouverts, mais rien de dramatique. D'autre part, il semble que le plasma est également responsable de ce qui suit:

utilisation VFS (2 jours)

Vous voyez la goutte de poignées de fichiers à la fin? Ce fut le redémarrage du plasma.

Izzy
la source
Efface sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'le bélier supplémentaire? Vous pouvez afficher les fichiers ouverts des programmes à l'aide delsof
Savvas Radevic
De plus, avez-vous essayé de changer de gestionnaire de bureau? par exemple lxde (ou lubuntu-desktop)? Enfin, êtes-vous sûr que la sortie sur le disque est correcte? Avez-vous vérifié les données SMART du disque et la vitesse de copie des fichiers depuis / vers le disque à l'aide d'un CD live?
Savvas Radevic
Cochez cette case
Mitch
@medigeek: Comme je l'ai souligné, les caches et les tampons ne sont pas le problème. Voir la sortie de free. Passer à un autre DE, j'ai en fait envisagé; si KDE3.5 avait été disponible, je ne me serais pas retrouvé avec Plasma. Cela ne peut être que temporaire pour voir si le plasma est impliqué.
Izzy
@Mitch: J'ai compris que memprof devait être utilisé contre un processus connu (que je n'ai pas encore isolé). Vous êtes sûr qu'il peut être utilisé à l'échelle du système? De plus, comme l'indique l'erreur "trop ​​de fichiers ouverts", il me semble qu'un processus ouvre beaucoup de descripteurs de fichiers, sans jamais les libérer. Je ne sais pas si cela serait rattrapé par memprof. J'ai maintenant mis en place un script pour capturer les 5 premiers processus par des fichiers ouverts - j'espère que cela deviendra le plus mauvais.
Izzy

Réponses:

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

  2. Ouvrez une console et exécutez "top". Utilisez ensuite <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 vers la mémoire perdue sera perdu, il ne sera pas utilisé et sera échangé. Exécutez également "lsof" et recherchez un processus avec beaucoup de fichiers ouverts, car cela semble vraiment être une fuite de descripteur de fichier.

  3. Suivez le programme et signalez un bug.

Alistair Buxton
la source
J'ai déjà essayé d'utiliser top / htop pour cela. Le problème est qu'il n'a montré aucun résultat pour la mémoire RESident (comme décrit ci-dessus, seule une petite partie de la mémoire utilisée a pu être connectée aux applications en cours d'exécution). Et en ce qui concerne la mémoire VIRTuelle, elle est difficile à interpréter (même juste après le démarrage, la mémoire virtuelle utilisée résume jusqu'à 3 To ici - une taille que même mon disque dur ne pouvait pas gérer). Ainsi, par exemple, Evolution utilise actuellement 1,9 Go de VIRT, selon top, tandis que la mémoire globale utilisée s'élève à 1,2 Go (hors cache et tampons). Et oui, ma première intention est de retrouver le programme, donc je pourrais déposer un bug ...
Izzy
Je viens d'ajouter 2 images de mon système de surveillance. Il semble que les «sauts» se soient toujours produits à la même heure de la journée (1 exception cependant). Malheureusement, les images ne donnent aucun horodatage à vérifier avec cron. BTW: existe-t-il un moyen de contrôler quel processus a combien de fichiers ouverts?
Izzy
1
Votre supposition était bonne. Bien qu'il ne s'agisse pas d'un démon, il s'agissait principalement d'un composant KDE: plasma-desktop (voir ci-dessus). Chose amusante à ce sujet: je viens de comprendre et je l'ai posté ici - et 10 minutes plus tard dans mon quotidien, apt-get update && apt-get upgradeil y avait une mise à jour pour plasma-desktop; ces gars sont rapides X) Maintenant, je le regarde juste un moment pour voir si le problème est résolu, avant de le déclarer tel. Jusqu'à présent, les choses semblent assez prometteuses.
Izzy
Semble toujours stable. Bien que ni moi lsofni toppointé sur le "processus diabolique", votre supposition concernant le démon KDE m'a dirigé vers le fauteur de troubles. Alors merci encore - la disponibilité de ma machine est maintenant d'environ 14d, et tout semble toujours stable, même si j'ai même exécuté des choses comme VirtualBox, compilé, etc. en parallèle. Je considère donc que cela est résolu et je marque le match le plus proche :)
Izzy
0

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

Vous pouvez lire ce brillant article (Linux a mangé mon RAM) pour comprendre comment Linux gère votre RAM et pourquoi il n'y a pas lieu de s'inquiéter:

http://www.linuxatemyram.com/

gemue2010
la source
4
Oh - je n'ai jamais entendu dire que c'est "un comportement normal du système" si le système se bloque après 7 jours avec une erreur "trop ​​de fichiers ouverts". J'utilise Linux depuis environ 15 ans maintenant, je n'ai jamais eu ça. Et oui, je comprends parfaitement comment Linux utilise la "RAM libre" (en l'utilisant pour la mise en cache, etc.) Comme indiqué ci-dessus: le cache et les tampons ne sont pas le problème ici. Je ne parle pas de RAM utilisée pour de bonnes raisons - Linux ne s'en tiendra jamais aux caches pour le prix de l'échange.
Izzy