Linuxのメモリ使用量は加算されない

Linuxのメモリ使用量は加算されない

Ubuntu サーバーのメモリ使用量を監視しようとしています。 「top」コマンドを実行すると、メモリの 70% が使用されていることが示されます (「Mem:」行に表示されます)。 しかし、メモリ使用量を消費するプロセスを見つけて合計すると、70% には程遠い値になります。 誰か私に説明してくれませんか?

どうもありがとう!

これが私のトップコマンドの結果です:

トップ - 20:59:06 23 日 33 分、3 ユーザー、負荷平均: 0.06、0.12、0.09
タスク: 合計 92、実行中 1、スリープ中 91、停止中 0、ゾンビ 0
CPU: 0.3%us、0.2%sy、0.0%ni、99.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
メモリ: 合計 4124236k、使用済み 2903104k、空き 1221132k、バッファ 147508k
スワップ: 合計 4192252k、使用済み 440k、空き 4191812k、キャッシュ済み 2596860k

  PID ユーザー PR NI 仮想リソース SHR S %CPU %MEM 時間+ コマンド
30558 mysql 20 0 311分 36分 5956 S 0 0.9 0:00.74 mysqld
28848 ジーチャオ 20 0 50688 9244 3144 S 0 0.2 0:05.65 パイソン
  956 ルート 20 0 11712 8004 2964 S 0 0.2 0:39.26 ddclient - スリープ
28846 ジーチャオ 20 0 49256 7652 3280 S 0 0.2 0:07.17 パイソン
22284 ジーチャオ 20 0 10400 6876 1664 S 0 0.2 0:00.49 バッシュ
30433 ジーチャオ 20 0 10344 6776 1620 S 0 0.2 0:00.46 バッシュ
31053 ジーチャオ 20 0 10344 6768 1612 S 0 0.2 0:00.47 バッシュ
28847 ジーチャオ 20 0 48168 6096 2980 S 0 0.1 0:00.59 パイソン
29178 wwwデータ 20 0 228m 5392 2052 S 0 0.1 0:00.06 apache2
29179 wwwデータ 20 0 12796 5148 1920 S 0 0.1 0:00.02 apache2
29180 wwwデータ 20 0 12796 5148 1920 S 0 0.1 0:00.02 apache2
29181 wwwデータ 20 0 12796 5148 1920 S 0 0.1 0:00.02 apache2
29182 wwwデータ 20 0 12796 5148 1920 S 0 0.1 0:00.02 apache2
29183 wwwデータ 20 0 12796 5148 1920 S 0 0.1 0:00.02 apache2
  999 ルート 20 0 11396 3948 2052 S 0 0.1 0:21.21 apache2
  926 うわっ 20 0 24572 3284 2280 S 0 0.1 0:00.18 うわっ
30933 ルート 20 0 9604 3104 2484 S 0 0.1 0:00.00 sshd
22164 ルート 20 0 9604 3096 2484 S 0 0.1 0:00.01 sshd
30313 ルート 20 0 9604 3096 2480 S 0 0.1 0:00.00 sshd
24302 ルート 20 0 9632 3024 2428 S 0 0.1 0:00.07 sshd
  787 ルート 20 0 6664 2424 1988 S 0 0.1 0:00.05 sshd
    1 ルート 20 0 3504 1876 1276 S 0 0.0 0:01.57 初期化
24421 ジーチャオ 20 0 9632 1596 992 S 0 0.0 0:00.00 sshd
  812 syslog 20 0 31044 1484 1008 S 0 0.0 1:47.00 rsyslogd

答え1

確かに、その数字はプロセスによって使用される RAM と、ファイル用のバッファおよびキャッシュの組み合わせです。Linux は、これらのファイルのためにハード ドライブにアクセスするのではなく、アクセスされるファイルに対して RAM を最大限に活用するという哲学を持っています。

コマンドを使用するかfree、このコマンドでカーネル自体を調べてみてください。cat /proc/meminfo.

無料

% free
             total       used       free     shared    buffers     cached
Mem:       7987492    7717152     270340          0     314644    2435048
-/+ buffers/cache:    4967460    3020032
Swap:      5963772       1304    5962468

/proc/meminfo を cat する

% cat /proc/meminfo 
MemTotal:        7987492 kB
MemFree:          284328 kB
Buffers:          314384 kB
Cached:          2427852 kB
SwapCached:          116 kB
Active:          4698232 kB
Inactive:        2374796 kB
Active(anon):    3756264 kB
Inactive(anon):   768392 kB
Active(file):     941968 kB
Inactive(file):  1606404 kB
Unevictable:          68 kB
Mlocked:              68 kB
SwapTotal:       5963772 kB
SwapFree:        5962468 kB
Dirty:               452 kB
Writeback:             0 kB
AnonPages:       4330964 kB
Mapped:           185540 kB
Shmem:            193864 kB
Slab:             306532 kB
SReclaimable:     261520 kB
SUnreclaim:        45012 kB
KernelStack:        6192 kB
PageTables:        94376 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9957516 kB
Committed_AS:    9671884 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      585392 kB
VmallocChunk:   34359040964 kB
HardwareCorrupted:     0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:     8237056 kB

このfreeコマンドは合計 RAM を表示します。私の場合は 7987492 で、そのうち 7717152 が使用中で、270340 が空きです。これは RAM、バッファ、キャッシュの合計です。2 行目はバッファとキャッシュによって使用されている RAM の量 (4967460) を示しています。つまり、実際には 3020032 の RAM が空いているということです。

からitworld.com の記事メモリ使用量を理解するには:

バッファ数は、カーネルがファイルの内容を読み取る必要がある場合など、カーネルがディスクにアクセスした結果生じるメモリ内ブロックを表します。キャッシュ数は、最近読み取ったファイルの内容をキャッシュするために使用されている RAM の量を示します。バッファ数は、ファイル システム レイヤーがバイパスされると増加し、キャッシュはファイル システムが使用されると増加します。どちらも、読み取り操作が増えると増加します。

注記:Linux カーネルのメモリ マネージャーは、アプリケーションが実際に必要とする場合、バッファーとキャッシュに使用されている RAM を解放することに注意してください。

リソース

関連情報