Une autre question sur la mémoire sur Solaris 10.
A haut montre que j'ai 672 Mo de mémoire libre:
130 processes: 126 sleeping, 2 zombie, 2 on cpu
CPU states: 95.1% idle, 3.9% user, 1.0% kernel, 0.0% iowait, 0.0% swap
Memory: 16G phys mem, 672M free mem, 2048M total swap, 2023M free swap
A vmstat me montre la même chose:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr rm s0 s1 s2 in sy cs us sy id
0 0 0 564744 687896 3 13 0 0 0 0 0 0 0 0 0 354 667 752 1 1 98
Mais quand je fais un Prapstat -a -s -s -s -s -s Je reçois ceci:
NPROC USERNAME SWAP RSS MEMORY TIME CPU
45 orbixadm 1449M 1592M 9.7% 4:46:53 0.4%
48 root 146M 160M 1.0% 8:09:49 1.2%
3 user1 46M 204M 1.2% 0:00:45 0.0%
9 webservd 46M 14M 0.1% 0:00:00 0.0%
5 ctxsrvr 28M 32M 0.2% 4:54:51 0.0%
11 user2 23M 34M 0.2% 0:00:37 0.2%
4 user3 4840K 11M 0.1% 0:00:01 0.0%
1 smmsp 1456K 4552K 0.0% 0:00:24 0.0%
2 daemon 2128K 6224K 0.0% 0:06:32 0.0%
1 user4 1232K 3608K 0.0% 0:00:00 0.0%
1 nagios 376K 2472K 0.0% 0:15:18 0.0%
et comme vous pouvez le constater, la somme des valeurs RSS n'atteint pas 15 Go de mémoire et même si j'ajoute des valeurs d'échange.
Donc, ma question est: quelle commande est-ce que je crois?
Si top et vmstat me donnent le bon résultat, où mes 15 Go ont été utilisés de la mémoire? Sinon, pourquoi me montre-ils cela?
EDIT: le résultat de la commande: % echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 1687138 13180 82%
Anon 137110 1071 7%
Exec and libs 47107 368 2%
Page cache 95277 744 5%
Free (cachelist) 22248 173 1%
Free (freelist) 69592 543 3%
Total 2058472 16081
Physical 2055442 16058
Edit 2:
OK, je peux maintenant voir la mémoire utilisée par arc cache.
[.____] mais avec de nouveaux tests, j'ai maintenant:
2066 MB used
(PRSTAT -Z et ECHO :: MEMSTAT | MDB -K Résultat)
[.____] 1193 MB free
(haut résultat)
[.____] 8859 MB ARC cache
(kstat zfs :: arcstats: taille résultat)
Qui nous donnent plus ou moins 12 GB
de mémoire, tandis que mon système a 16 GB
.
Peut-être que j'ai manqué autre chose, mais où sont l'autre 4 GB
?
ZFS utilise probablement la plupart de votre mémoire cache ARC. Si vous voulez savoir comment votre RAM est utilisé, exécutez cette commande en tant que root:
# echo ::memstat | mdb -k
Cette affiche quelque chose comme sur Solaris 10 10/09 et plus récente, celle-ci:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 60569 236 16%
ZFS File Data 53270 208 14%
Anon 41305 161 11%
Exec and libs 5891 23 2%
Page cache 1190 4 0%
Free (cachelist) 7006 27 2%
Free (freelist) 212607 830 56%
Total 381838 1491
Comme vous le voyez, il y a une ligne indiquant la quantité de RAM est utilisé pour les données de fichiers ZFS de cache. Malheureusement, vous exécutez une version de Solaris 10 plus si memstat ne montre pas cette statistique ZFS séparément. Il est inclus dans la mémoire du noyau utilisé qui est source de confusion. noyau A ne doit pas utiliser 13 Go de RAM dans des circonstances normales.
Quoi qu'il en soit, il y a toujours un moyen d'afficher la taille complète ARC sur votre serveur.
Il suffit de lancer cette commande:
# kstat zfs::arcstats:size
module: zfs instance: 0
name: arcstats class: misc
size 273469024
Elle montre que, sur ma machine, 273 Mo de RAM sont actuellement utilisés pour gérer le cache ARC ZFS. Memstat montre que de ces 273 Mo, 208 Mo sont utilisés comme cache de fichiers. Jusqu'à ces 208 MB de RAM pourrait être libéré automatiquement à la demande devrait avoir besoin d'applications.
Maintenant, regardons les processus de la mémoire. Si vous utilisez l'option -Z avec prstat, il présente un résumé par zone sous statistiques par processus. Ici, la zone globale (et seulement) utilise 185 Mo de RAM. Cela devrait (environ) correspondent à la somme de la colonne de tous les processus.
# prstat -Z
PID USERNAME SIZE RSS STATE PRI Nice TIME CPU PROCESS/NLWP
741 noaccess 129M 113M sleep 59 0 0:00:35 1,4% Java/18
973 root 5148K 832K run 29 0 0:00:00 0,4% script/1
972 root 5072K 900K sleep 59 0 0:00:00 0,2% script/1
998 root 7148K 2812K cpu0 49 0 0:00:00 0,1% prstat/1
974 root 3456K 968K sleep 49 0 0:00:00 0,1% ksh/1
5 root 0K 0K sleep 99 -20 0:00:01 0,1% zpool-rpool/37
241 root 5400K 1608K sleep 59 0 0:00:00 0,0% VBoxService/5
77 root 7620K 2356K sleep 59 0 0:00:00 0,0% devfsadm/7
969 root 3372K 936K sleep 59 0 0:00:00 0,0% script/1
126 root 9664K 2844K sleep 59 0 0:00:00 0,0% nscd/31
480 root 9420K 2036K sleep 59 0 0:00:00 0,0% sendmail/1
11 root 9164K 7860K sleep 59 0 0:00:29 0,0% svc.configd/17
1 root 2504K 1432K sleep 59 0 0:00:00 0,0% init/1
413 root 15M 9644K sleep 59 0 0:00:00 0,0% fmd/19
377 root 6536K 2848K sleep 59 0 0:00:02 0,0% inetd/4
ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE
0 48 177M 185M 12% 0:01:24 2,5% global
Celles-ci correspondent 185 Mo à la somme de deux lignes dans la production memstat: " Anon " qui est RAM utilisés par les applications pour stocker des données et le code " Exec et libs " qui est les applications et leurs bibliothèques.
La mémoire est remplie de pages non éteintes de données lues à partir du disque. Il est maintenu en mémoire car ces fichiers peuvent être lus à nouveau et garder les données en mémoire enregistre un disque en lecture. La mémoire libre est perdue pour toujours. L'ordinateur essaie donc de garder aussi peu de choses que possible.
Par exemple, disons que vous exécutez un programme. Le programme se termine. Le programme est toujours en mémoire, mais ces pages de mémoire ne sont utilisées par aucun processus car le programme ne fonctionne pas. Si le système n'est pas sous pression de mémoire, les pages sont conservées en mémoire. Si le programme s'écoule à nouveau, cela permettra d'économiser les efforts consistant à ne pas être libres d'avoir à allouer plus de mémoire pour le programme, puis à la lire à nouveau. Et si les pages sont nécessaires pour autre chose, il s'agit toujours d'une victoire pour le système car il est plus facile de déplacer une page de mémoire directement à partir de l'utilisation à une autre que de le rendre libre pour le rendre libre.
La mémoire n'est pas une ressource stable. Si vous laissez 1 Go gratuit pendant une heure, tout ce que vous auriez pu faire avec ces données est perdue pour toujours.