
top を実行すると、502968 KB のうち 48064 KB が使用されており、16884 KB が空きになっていることがわかります。しかし、個々のプロセスを見ると、mysql が時々 RAM の 9.4% を消費していることがわかりますが、他には何も消費していないようです。何が RAM をすべて消費しているのでしょうか?
以下は上からのスクリーンキャプチャです:
top - 20:46:07 up 1 min, 1 user, load average: 0.18, 0.05, 0.02
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.4 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 502968 total, 241236 used, 261732 free, 10488 buffers
KiB Swap: 524284 total, 0 used, 524284 free, 106756 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1584 dmackey 20 0 20508 1372 1000 R 0.4 0.3 0:00.01 top
1 root 20 0 26664 2456 1340 S 0.0 0.5 0:00.69 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0
7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0H
8 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0.0 0.0 0:00.24 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
以下は無料からのものです:
total used free shared buffers cached
Mem: 502968 355252 147716 0 10816 111548
-/+ buffers/cache: 232888 270080
Swap: 524284 0 524284
答え1
何もない。
それはLinuxであり、使い方。
ディスク キャッシュには「空き」メモリを使用します。十分に活用されていないリソースがあっても意味がありません。
プロセスがより多くのメモリを必要とする場合、カーネルにメモリを要求し、(通常は)それを取得します。
/etc/my.cnf
ああ、そして MySQL は、アクセス時間を短縮するために、インデックス、クエリ、およびテーブルがディスクからメモリにキャッシュされるように、必要に応じて ( で構成されているとおりに) 使用します。
答え2
これは、最後に使用されたときにメモリ内に残されたジャンクです。ほとんどの場合、ディスクから読み取られたデータ、またはディスクに書き込まれたデータです。OS がメモリを解放しないのは、次の 3 つの理由により、それが無駄だからです。
メモリがすぐに使用されない場合は、メモリを解放しても何も達成されません。
メモリがすぐに使用される場合、メモリを解放することは、再び使用されるようにする必要があるときに元に戻す必要がある作業にすぎません。
メモリ内にあった情報が再び必要になった場合、メモリを解放すると、メモリではなくディスクからその情報を取得する必要があり、速度が大幅に低下します。
現代のオペレーティング システムでは、他に選択肢がまったくない場合にのみメモリを解放します。「後で使用できるように、今すぐメモリを解放したい」と考えているなら、やめてください。後で使用するために、メモリを今すぐ解放する必要はありません。ここではトレードオフはなく、必要なときまでメモリを使用し続ける方が純粋に有利です。
答え3
将来の分析のために top の出力を記録するのが、質問に回答する最善の方法です。すぐに解決できる方法はありません。時間をかけて観察しながら調査する必要があります。メモリを使用しているものの表面をざっと調べるために私が使用している 1 回限りの方法は、これを root の crontab に入れることです。
/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`
次に、テキスト操作とページャー機能を使ってトレンドを追跡します。このスタックオーバーフローの投稿https://stackoverflow.com/questions/7908953/CPU使用量の測定方法には、このように top を使用するより包括的な例や、.toprc
CPU 統計用に を介して top をカスタマイズする例がいくつかありますが、ニーズに合わせて簡単に調整できます。