Solaris 10のメモリに関するもう1つの質問。
A topは、672 MBの空きメモリがあることを示しています。
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は私に同じことを示します:
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で良い結果が得られた場合、15 GBの使用済みメモリはどこにありますか?そうでなければ、なぜ彼らはそれを私に示すのですか?
編集:コマンドの結果:% 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 used
(prstat -Zおよびecho :: memstat | mdb -k結果)1193 MB free
(top結果)8859 MB ARC cache
(kstat zfs :: arcstats:size結果)
これは多かれ少なかれ12 GB
のメモリ、システムには16 GB
。
たぶん私は何か他のものを逃したが、他はどこにあるか4 GB
?
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
ご覧のとおり、RAMがZFSファイルデータのキャッシュに使用されている量を示しています。残念ながら古いSolaris 10リリースを実行しているため、memstatはこのZFS統計を表示しませんそれは混乱を招くカーネル使用メモリに含まれています。カーネルは13 GBのRAM=通常の状況では使用しないでください。
とにかく、サーバーに完全なARCサイズを表示する方法はまだあります。
次のコマンドを実行するだけです:
# kstat zfs::arcstats:size
module: zfs instance: 0
name: arcstats class: misc
size 273469024
私のマシンでは、273 MBのRAMが現在ZFS ARCキャッシュの処理に使用されています。memstatは、これらの273 MBから208 MBがファイルキャッシュとして使用されていることを示しています。これらの208までRAMのMBは、アプリケーションで必要な場合、オンデマンドで自動的に解放できます。
プロセスのメモリ使用量を見てみましょう。 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」はアプリケーションとそのライブラリコードです。
メモリは、ディスクから読み込まれたデータのマップされていないページで満たされます。これらのファイルは再度読み取られる可能性があり、メモリにデータを保持するとディスクの読み取りが節約されるため、メモリに保持されます。空きメモリは永久に浪費されるため、コンピュータはそれを可能な限り少なくしようとします。
たとえば、プログラムを実行するとします。プログラムは終了します。プログラムはまだメモリ内にありますが、プログラムが実行されていないため、メモリのこれらのページはどのプロセスでも使用されません。システムのメモリが不足していない場合、ページはメモリに保持されます。プログラムが再度実行される場合、これにより、プログラムにさらに多くのメモリを割り当てて再度読み込む必要があるだけで、プログラムを解放する手間が省けます。また、ページが別の目的で必要な場合でも、メモリのページを使用から別のページに直接移動する方が、再使用するためだけに解放するよりも簡単です。
メモリは保存可能なリソースではありません。 1 GBを1時間無料のままにしておくと、そのデータで実行できたはずのものがすべて永久に失われます。