Avant de demander, juste pour être clair: oui, je connais le cache disque, et non, ce n'est pas mon cas :) Désolé, pour ce préambule :)
J'utilise CentOS 5. Toutes les applications du système échangent beaucoup, et le système est très lent. Quand je fais free -m
, voici ce que j'ai eu:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Donc, je n'ai en fait que 42 Mo à utiliser! Pour autant que je sache, -/+ buffers/cache
en fait, ne compte pas le cache disque, je n'ai donc que 42 Mo, n'est-ce pas? J'ai pensé que je pouvais me tromper, alors j'ai essayé de désactiver la mise en cache du disque et cela n'a eu aucun effet - l'image est restée la même.
Alors, j’ai décidé de trouver qui utilise toute ma mémoire vive, et j’ai utilisé top
pour ça. Mais, apparemment, il indique qu'aucun processus n'utilise ma RAM. Le seul processus dans mon top est MySQL, mais il utilise 0,1% de RAM et 400 Mo de swap. Même image lorsque j'essaie d'exécuter d'autres services ou applications - tous sont échangés, top
montre que MEM n'est pas utilisé (0,1% maximum pour tous les processus).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Redémarrer n’aide pas et, à leur manière, c’est très lente, ce que je ne m'attendrais pas normalement sur cette machine (4 cœurs, 4 Go de RAM, RAID1).
Donc, avec cela - je suis à peu près sûr que ce n'est pas un cache de disque, qui utilise la RAM, car normalement, il aurait dû être réduit et laisser les autres processus utiliser la RAM plutôt que de passer à l'échange.
Donc, pour finir, la question est la suivante: si quelqu'un a des idées, comment savoir quel processus utilise réellement la mémoire de manière aussi importante?
la source
irc.freenode.org
. J'ai créé un salle de discussion pour une discussion prolongée ici .Réponses:
Sur Linux dans le
top
processus, vous pouvez appuyer sur<
touche pour décaler le tri de l'affichage de sortie vers la gauche. Par défaut, il est trié par le%CPU
donc, si vous appuyez 4 fois sur la touche, vous pourrez le trier parVIRT
qui est la taille de la mémoire virtuelle vous donnant votre réponse.Une autre façon de faire est:
devrait vous donner et la sortie triée par processus taille virtuelle.
Voici la version longue:
la source
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
sur le serveur Ubuntu 11.10.-o
options. RHEL4 cela fonctionne. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
travaux. Je vais essayer 11h10 plus tard ce soir, mais si vous trouvez les bonnes options de tri, merci de me le faire savoir.ps -e -o pid,vsz,comm | sort -n -k 2
pourrait fonctionner mais je n'ai pas d'endroit à vérifier pour le moment.-ef
option. Mais cela semble produire un résultat raisonnable:sudo ps axo pid,vsz,comm=|sort -n -k 2
ps -e
oups -a
<
Je ne savais pas que c'était possible, fedoraAffiche la mémoire des processus en mégaoctets et le chemin du processus.
la source
Juste une note sur un serveur présentant les mêmes symptômes, mais toujours épuisée par la mémoire. Ce qui a fini par trouver était un sysctl.conf à partir d’une boîte avec 32 Go de RAM et la configuration d’une base de données avec des pages énormes configurées à 12 000. Cette boîte n’ayant que 2 Go de RAM, elle assignait toute la RAM libre aux 960 d'entre eux). La définition d’énormes pages à 10, aucune d’elles n’ayant été utilisée, libère toute la mémoire.
Une vérification rapide de / proc / meminfo pour rechercher les paramètres HugePages_ peut être un bon début pour dépanner au moins un bourreau de mémoire inattendu.
la source
Vous pouvez également utiliser la commande ps pour obtenir plus d'informations sur le processus.
la source
Je référence ce et Mémoire totale utilisée par le processus Python? - débordement de pile , voilà ma réponse. Je reçois maintenant un outil de comptage de processus spécifique (python).
Joignez ma liste de processus.
Référence
la source
Dans mon cas, le problème était que le serveur était un serveur virtuel VMware avec
vmw_balloon
module activé:Fonctionnement:
Ainsi, environ 5 Go de mémoire ont en fait été récupérés par l'hôte. Donc, malgré le fait d'avoir officiellement 8 Go sur ma machine virtuelle, en pratique, c'était beaucoup moins:
la source
Faire un script appelé
show-memory-usage.sh
avec contenu:la source