Solaris 10で使用されるメモリ


10

Solaris 10のメモリに関するもう1つの質問。

トップ私は672メガバイトの空きメモリを持っていることを示してくれました:

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

vmstatを示して私と同じ:

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

しかし、prstat -a -s sizeを実行すると、次のようになります。

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%

ご覧のとおり、RSS値の合計が15 GBのメモリに達していません。それに、SWAP値を追加しても、

だから私の質問は:どのコマンドを信じますか?

topとvmstatで良い結果が得られた場合、15GBの使用済みメモリはどこにありますか?そうでなければ、なぜ彼らはそれを私に示すのですか?

編集:コマンドの結果: % 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

編集2:

では、ARCキャッシュが使用しているメモリを確認します。
しかし、いくつかの新しいテストで、今私は持っています:

2066 MB usedprstat -Z and echo :: memstat | mdb -k result)
1193 MB freetop result)
8859 MB ARC cachekstat zfs :: arcstats:size result)

12 GB私のシステムはメモリを持っていますが、それは多かれ少なかれ私たちにメモリを与えます16 GB
多分私は何か他のものを逃したが、他は4 GBどこですか?


kstat zfs::arcstats:size質問に出力を追加してください。
jlliagre 2012年

回答:


12

ZFSは、ほとんどのメモリをARCキャッシュとして使用している可能性があります。RAMの使用方法を知りたい場合は、rootで次のコマンドを実行します。

# echo ::memstat | mdb -k

Solaris 10 10/09以降では、次のように表示されます。

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

ご覧のとおり、ZFSファイルデータのキャッシュに使用されるRAMの量を示す行があります。残念ながら、古いSolaris 10リリースを実行しているため、memstatはこのZFS統計を個別に表示しません。これは、混乱を招くカーネル使用メモリに含まれています。カーネルは、通常の状況では13 GBのRAMを使用すべきではありません。

とにかく、サーバーに完全なARCサイズを表示する方法はまだあります。

次のコマンドを実行してください:

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

私のマシンでは、現在ZFS ARCキャッシュの処理に273 MBのRAMが使用されていることがわかります。memstatは、これらの273 MBから208 MBがファイルキャッシュとして使用されることを示しています。これらの208 MBまでのRAMは、アプリケーションが必要とする場合、オンデマンドで自動的に解放できます。

プロセスのメモリ使用量を見てみましょう。prstatで-Zオプションを使用すると、プロセスごとの統計の下にゾーンごとの概要が表示されます。ここで、グローバル(かつ唯一の)ゾーンは185 MBのRAMを使用しています。これは、(おおよそ)すべてのプロセスのrss列の合計と一致する必要があります。

# 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

これらの185 MBは、memstat出力の2行の合計に対応します。「Anon」は、アプリケーションがデータを格納するために使用するRAMであり、「Execとlibs」は、アプリケーションとそのライブラリコードです。


回答もありがとうございます。コマンドの結果は詳細ではありませんが、RAMを使用しているものを確認する必要があります。
ジェレミーC.

質問を更新して出力を追加できますか?ちなみに、マップされていないページはSolarisによってRAMの空き容量として報告されるので、実際には少し間違っています。
jlliagre

コマンド結果で質問を編集しました。私の質問は完全には答えられていません。少なくとも、空きメモリは:: memstatの場合よりもtopおよびvmstatの場合と同じであることがわかります。しかし、各プロセスで何が使用されているかを詳しく説明する意味はありますか?
Jeremy C.

使用しているSolaris 10アップデート(cat / etc / release)とZFSを使用していますか?
jlliagre 2012年

それはSolaris 10 5/09であり、はい、私はZFSを使用します
Jeremy C.

4

メモリは、ディスクから読み込まれたデータのマップされていないページで満たされます。これらのファイルは再度読み取られる可能性があり、メモリにデータを保持するとディスクの読み取りが節約されるため、メモリに保持されます。空きメモリは永久に浪費されるため、コンピュータはそれをできるだけ少なくしようとします。

たとえば、プログラムを実行するとします。プログラムは終了します。プログラムはまだメモリ内にありますが、プログラムが実行されていないため、これらのメモリのページはどのプロセスでも使用されません。システムのメモリが不足していない場合、ページはメモリに保持されます。プログラムが再度実行される場合、これにより、プログラムにさらに多くのメモリを割り当てて再度読み込む必要があるだけで、プログラムを解放する手間が省けます。また、ページが何かに必要な場合でも、メモリのページを使用から別のページに直接移動する方が、再度使用するためだけに解放するよりも簡単なので、システムにとっては有利です。

メモリは保存可能なリソースではありません。1 GBを1時間無料のままにしておくと、そのデータで実行できたはずのものがすべて永久に失われます。


このよく説明された答えをありがとう。すべてのSolarisサーバーでRAMの90%が多かれ少なかれ使用される理由を理解しました。
Jeremy C.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.