この質問の動機は Mac OS Xカーネルが750MBのRAMを使用していることを発見したときの私のショック です。
私は20年間Linuxを使用しており、カーネルRAM=の使用がXに比べて小さいことを常に知っていました(それは本当ですか?.
それで、グーグルの後で、私はslabtop
を試してみました:
Active / Total Size (% used) : 68112.73K / 72009.73K (94.6%)
これは、私のカーネルが約72MBのRAM now?を使用していることを意味しますか?
(top
がXorg
のRSSを17Mと報告すると、カーネルはXを矮小化しますが、その逆ではありません)。
「通常の」カーネルとはRAMラップトップの使用量(範囲)?
MacOSがLinuxよりも桁違いに多い理由RAM?
PS。ここでの回答は最後の質問に対応していません。関連する質問を参照してください。
カーネルは少し誤称です。 Linuxカーネルは、いくつかのプロセス/スレッド+モジュール(lsmod
)で構成されているため、全体像を把握するには、単一のコンポーネントだけでなく、ボール全体を見る必要があります。
ちなみに私はslabtop
を示しています:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
slabtop
のmanページにも次のように書かれています。
Slabtop統計ヘッダーは、使用されているスラブのバイト数を追跡しており、物理メモリの測定値ではありません。/proc/meminfoファイルの「Slab」フィールドは、使用されているスラブの物理メモリに関する情報を追跡しています。
質問の下のコメントに @ derobertsuggested としてキャッシュを削除すると、次のようになります。
$ Sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$
Active / Total Size (% used) : 61858.78K / 90524.77K (68.3%)
3を送信すると、次のことが行われます。ページキャッシュ、エントリ、iノードを解放します。 メモリキャッシュとバッファをダンプする方法またはツールはありますか? "なので、ページキャッシュ、デントリに関する情報を維持するだけで、110MBのスペースが使用されていました。およびiノード。
slabtop
についてもう少し詳しく説明しています。タイトルは その日のLinuxコマンド:slabtop です。この写真は少しぼやけていますが、ここでは私たちが知っている「考える」ものを示します。
この手法を使用して、スラブの使用状況のスナップショットを取得できます。基本的に、この情報を/proc/meminfo
から引き出すことができます。
$ grep Slab /proc/meminfo
Slab: 100728 kB
また、/proc/modules
からこれらの値を取得することにより、カーネルモジュールのサイズ値を取得できます(ディスク上のサイズかRAM内のサイズか不明)。
$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758
SLABに関する詳細の多くは、このプロシージャ構造/proc/slabinfo
でアクセスできます。
$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000 0 0 320 25 2 : tunables 0 0 0 : slabdata 0 0 0
Fuse_request 100 125 632 25 4 : tunables 0 0 0 : slabdata 5 5 0
Fuse_inode 21 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
システムが起動すると、ロードされた直後のLinuxカーネルのメモリ使用量を報告する行があります。
$ dmesg |grep Memory:
[ 0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)
これはどう:
Active / Total Size (% used) : 4709.24K / 5062.03K
通常のカーネルでヘッドレスで実行される、新しく起動した非常に小さなマシンでの使用です。
Derobertが示唆するように、カーネルはキャッシュに利用可能なメモリを利用しますが、これはslabtop
に表示されるものの多くです。これは、ファイルキャッシュに加えて、使用されなくなったユーザースペースプロセスからの共有可能なメモリに関係しています。カーネルは、同じものが再び必要になるまで、または何かがアクティブにRAMを必要とするまで、そこに残します。この場合、RAMは忘れられます。たとえは、本を棚から取り出して、テーブルの上で読むために置いておくことです。読書が終わったら、もう一度見たい場合に備えて、本を開いたままにしておくことができます。
この512 GB RAM Solarisを実行しているサーバーでは、カーネルは25 GBを使用します:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 3210102 25078 5%
Anon 15266226 119267 23%
Exec and libs 41457 323 0%
Page cache 3539331 27651 5%
Free (cachelist) 13799571 107809 21%
Free (freelist) 30093164 235102 46%
Total 65949851 515233
Physical 65927406 515057
その小さい方は、RAM)の半分以上を持っています:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 2149699 16794 52%
Anon 517016 4039 13%
Exec and libs 15420 120 0%
Page cache 21840 170 1%
Free (cachelist) 8768 68 0%
Free (freelist) 1404862 10975 34%
Total 4117605 32168
Physical 4096002 32000
心配する必要はありません。未使用のRAMは無駄ですRAMとにかく。