2GBのRAMを搭載し、CentOSを使用するMediaTempleのDV管理対象サーバーで実行されているサーバーがあります。コマンド free -m
はこれを次のように与えます:
total used free shared buffers cached
Mem: 2048 1948 99 0 0 140
-/+ buffers/cache: 1808 239
Swap: 1536 288 1247
しかし、top
を使用してどのプロセスがメモリを使用しているかを把握しようとすると、次のようになります。
1417 mysql 20 0 496m 496m 7512 S 1.3 24.3 42:10.92 mysqld
3259 okgo 20 0 49436 48m 11m S 0.0 2.4 0:21.96 php-cgi
3175 root 20 0 49144 47m 3196 S 0.0 2.3 0:01.80 spamd
3176 popuser 20 0 46940 45m 992 S 0.0 2.2 0:00.00 spamd
3269 okgo 20 0 44372 43m 10m S 19.2 2.1 0:02.11 php-cgi
3272 okgo_for 20 0 23808 23m 10m S 0.0 1.1 0:00.79 php-cgi
27161 root 20 0 10816 10m 9460 S 0.0 0.5 0:01.97 httpd
786 root 20 0 4844 4844 2140 S 0.0 0.2 2:28.96 newrelic-daemon
1017 Apache 20 0 4552 4552 2228 S 0.0 0.2 0:01.38 httpd
3277 postfix 20 0 4432 4432 2548 S 0.0 0.2 0:00.00 trivial-rewrite
ここで私を混乱させているのは、free -m
コマンドは、このメモリがキャッシュされていないことを示しているようです。つまり、-/+ buffers/cache
行には1827が使用されていることも示されています!ここで何が欠けていますか?
リクエストに応じて、/ proc/meminfoの出力を次に示します(これはfree -mと矛盾しているようです?):
MemTotal: 2097152 kB
MemFree: 55808 kB
Cached: 158656 kB
Buffers: 0 kB
Active: 368924 kB
Inactive: 428580 kB
Active(anon): 273480 kB
Inactive(anon): 365368 kB
Active(file): 95444 kB
Inactive(file): 63212 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1572864 kB
SwapFree: 1277160 kB
Dirty: 68 kB
Writeback: 0 kB
AnonPages: 638848 kB
Shmem: 4424 kB
Slab: 1243780 kB
SReclaimable: 1222584 kB
SUnreclaim: 21196 kB
また、 この投稿 は状況を明らかにするかもしれませんが、ここの/ proc/meminfoは、使用されているメモリの割合が非常に高く、上部にリストされていないことを示しています。
スラブはカーネルによって使用されるメモリであり、topには表示されません。現時点では約1.2GBであり、top出力にfreeで指定された出力に正しく追加されます。 slabtopコマンドを使用して、使用場所を詳細に調べることができます。
P.S.システムに大量のファイルがあり、それらを大量に読み取り/書き込みするときに、大量のスラブメモリが使用される最も一般的なシナリオの1つ。次に、多くのメモリがiノード情報をキャッシュするために使用されます。このキャッシングは少し調整できますが、パフォーマンスが犠牲になります。