カーネルは少し間違った名前です。 Linux カーネルは、いくつかのプロセス/スレッド + モジュール (lsmod
) したがって、全体像を把握するには、単一のコンポーネントだけでなく、ボール全体を見る必要があります。
ちなみに私のショーは slabtop
:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
slabtop
の man ページ これも言いました:
slabtop 統計ヘッダーは、使用されているスラブのバイト数を追跡しており、物理メモリの測定ではありません。 /proc/meminfo ファイルの「Slab」フィールドは、使用済みのスラブ物理メモリに関する情報を追跡しています。
キャッシュの削除
質問の下のコメントで @derobert が提案したようにキャッシュを削除すると、次のことが行われます:
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$
Active / Total Size (% used) : 61858.78K / 90524.77K (68.3%)
3 を送信すると、次のことが行われます:ページキャッシュ、dentry、および inode を解放します。これについては、次のタイトルの U&L Q&A で詳しく説明します:メモリ キャッシュとバッファをダンプする方法またはツールはありますか?".したがって、ページキャッシュ、dentry、および inode に関する情報を維持するだけで、110MB のスペースが使用されていました。
追加情報
- 興味があれば、
slabtop
について説明しているこのブログ記事を見つけました もう少し詳しく。タイトルは「今日の Linux コマンド:slabtop」です。 - スラブ キャッシュについては、ウィキペディアで「スラブの割り当て」というタイトルで詳しく説明されています。
カーネルが使用している RAM の量は?
この写真は私には少しわかりにくいですが、私たちが知っていると「思う」ことは次のとおりです.
スラブ
この手法を使用して、Slab の使用状況のスナップショットを取得できます。基本的に、この情報を /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 構造 /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)
参考文献
- 記憶はどこへ行く? 2.6 カーネルでのメモリ使用量
これはどうですか:
Active / Total Size (% used) : 4709.24K / 5062.03K
通常のカーネルでヘッドレスで実行されている、新しく起動した非常に小さなマシンです。 したがって、多くは必要ありません。
derobert が示唆しているように、カーネルは利用可能なメモリをキャッシュに利用します。これは slabtop
で見られるものの多くです。 .これは、ファイル キャッシュに加えて、使用されなくなったユーザー空間プロセスからの共有可能なメモリに関係しています。カーネルは、同じものが再び必要になるか、何かが積極的に RAM を必要とし、その場合は忘れられるまで、そこに残します。たとえば、棚から本を取り出して、テーブルの上で読むために開いたままにします。読み終わったら、もう一度見る必要がある場合に備えて、開いたままにしておくことができます。
Solaris を実行するこの 512 GB RAM サーバーでは、カーネルは 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 です。