Verwendeter Speicher unter Solaris 10

10

Noch eine Frage zum Speicher unter Solaris 10.

Ein Top zeigt mir, dass ich 672 MB freien Speicher habe:

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

Ein vmstat zeigt mir dasselbe:

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

Aber wenn ich eine prstat -a -s Größe mache, bekomme ich folgendes:

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%

und wie Sie sehen können, erreicht die Summe der RSS-Werte nicht 15 GB Speicher, und selbst wenn ich SWAP-Werte hinzufüge.

Meine Frage lautet also: Welchem ​​Befehl glaube ich?

Wenn top und vmstat mir das gute Ergebnis liefern, wo sind meine 15 GB verwendeten Speicher? Wenn nicht, warum zeigen sie mir das?

Bearbeiten: das Ergebnis für den Befehl: % 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

Bearbeiten 2:

Ok, jetzt kann ich den vom ARC-Cache verwendeten Speicher sehen.
Aber mit einigen neuen Tests habe ich jetzt:

2066 MB used( prstat -Z und echo :: memstat | mdb -k Ergebnis)
1193 MB free( oberstes Ergebnis)
8859 MB ARC cache( kstat zfs :: arcstats: Größenergebnis )

Was uns mehr oder weniger 12 GBSpeicher gibt, während mein System hat 16 GB.
Vielleicht habe ich etwas anderes verpasst, aber wo sind die anderen 4 GB?

Jeremy C.
quelle
Bitte fügen Sie kstat zfs::arcstats:sizeIhrer Frage eine Ausgabe hinzu.
Jlliagre

Antworten:

12

ZFS verwendet wahrscheinlich den größten Teil Ihres Speichers als ARC-Cache. Wenn Sie wissen möchten, wie Ihr RAM verwendet wird, führen Sie diesen Befehl als root aus:

# echo ::memstat | mdb -k

Unter Solaris 10 10/09 und neuer wird Folgendes angezeigt:

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

Wie Sie sehen, gibt es eine Zeile, die angibt, wie viel RAM zum Zwischenspeichern von ZFS-Dateidaten verwendet wird. Leider führen Sie eine ältere Solaris 10-Version aus, sodass memstat diese ZFS-Statistik nicht separat anzeigt. Es ist im verwendeten Kernel-Speicher enthalten, was verwirrend ist. Ein Kernel sollte unter normalen Umständen keine 13 GB RAM verwenden.

Auf jeden Fall gibt es immer noch eine Möglichkeit, die volle ARC-Größe auf Ihrem Server anzuzeigen.

Führen Sie einfach diesen Befehl aus:

# kstat zfs::arcstats:size
module: zfs                             instance: 0
name:   arcstats                        class:    misc
        size                            273469024

Es zeigt, dass auf meinem Computer derzeit 273 MB RAM für die Verarbeitung des ZFS-ARC-Cache verwendet werden. memstat zeigt, dass von diesen 273 MB 208 MB als Dateicache verwendet werden. Bis zu 208 MB RAM können bei Bedarf automatisch freigegeben werden, falls Anwendungen dies benötigen.

Betrachten wir nun die Speichernutzung der Prozesse. Wenn Sie die Option -Z mit prstat verwenden, wird unter der Statistik pro Prozess eine Zusammenfassung pro Zone angezeigt. Hier verwendet die globale (und einzige) Zone 185 MB RAM. Dies sollte (ungefähr) mit der Summe aller Prozess-RSS-Spalten übereinstimmen.

# 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

Diese 185 MB entsprechen der Summe von zwei Zeilen in der memstat-Ausgabe: "Anon", der von Anwendungen zum Speichern von Daten verwendete RAM ist, und "Exec and libs", der die Anwendungen und ihren Bibliothekscode darstellt.

jlliagre
quelle
Vielen Dank auch für Ihre Antwort. Das Ergebnis des Befehls ist nicht wirklich detailliert, aber es ist notwendig zu sehen, was RAM verwendet.
Jeremy C.
Können Sie die Ausgabe hinzufügen, indem Sie Ihre Frage aktualisieren? Übrigens ist die Antwort, die Sie akzeptiert haben, tatsächlich leicht falsch, da nicht zugeordnete Seiten von Solaris als freier RAM gemeldet werden und nicht als verwendet, was das Problem ist, über das Sie sich beschweren.
Jlliagre
Frage mit dem Befehlsergebnis bearbeitet. Du hast recht, meine Fragen sind nicht vollständig beantwortet. Zumindest können wir sehen, dass der freie Speicher bei top und vmstat der gleiche ist wie bei :: memstat . Aber gibt es eine Bedeutung für Details, was durch jeden Prozess ausgelöst wird?
Jeremy C.
Welches Solaris 10-Update verwenden Sie (cat / etc / release) und verwenden Sie ZFS?
Jlliagre
Es ist Solaris 10 5/09, und ja, ich benutze ZFS
Jeremy C.
4

Der Speicher ist mit nicht zugeordneten Seiten mit Daten gefüllt, die von der Festplatte gelesen wurden. Es wird im Speicher gespeichert, da diese Dateien möglicherweise erneut gelesen werden und das Speichern der Daten im Speicher das Lesen einer Festplatte erspart. Freier Speicher wird für immer verschwendet, daher versucht der Computer, so wenig wie möglich davon zu behalten.

Angenommen, Sie führen ein Programm aus. Das Programm wird beendet. Das Programm befindet sich noch im Speicher, aber diese Speicherseiten werden von keinem Prozess verwendet, da das Programm nicht ausgeführt wird. Wenn das System nicht unter Speicherdruck steht, werden die Seiten gespeichert. Wenn das Programm erneut ausgeführt wird, erspart dies den Aufwand, es frei zu machen, nur um mehr Speicher für das Programm zuzuweisen und es dann erneut einzulesen. Und wenn die Seiten für etwas anderes benötigt werden, ist dies immer noch ein Gewinn für das System, da es einfacher ist, eine Speicherseite direkt von der Verwendung auf eine andere zu verschieben, als sie kostenlos zu machen, nur um sie wieder zu verwenden.

Speicher ist keine speicherbare Ressource. Wenn Sie 1 GB für eine Stunde frei lassen, geht alles, was Sie mit diesen Daten hätten tun können, für immer verloren.

David Schwartz
quelle
Vielen Dank für diese gut erklärte Antwort. Ich verstehe jetzt, warum auf allen meinen Solaris-Servern mehr oder weniger 90% RAM verwendet werden.
Jeremy C.