キャッシュにないときのLinuxメモリ使用量の追跡

キャッシュにないときのLinuxメモリ使用量の追跡

熊手を取り出す前に、Linuxキャッシュシステムにメモリが入っている場所を追跡するのが困難です。私は見たLinuxは私のRAMを食べる!実際のメモリ使用量に基づいて親プロセスをどのように確認できますか?Linuxでメモリ使用量を正しく決定するただし、これを例にすると、数値がシステムに表示される数値と正確に一致しません。

このシステムを使用すると、おそらく「キャッシュ」されているか、プログラムで使用されることがわかりますが、その数字は私に合計されません。

上から私はそれを見た。

top - 09:04:09 up 19 days, 20:38,  2 users,  load average: 0.00, 0.10, 0.11
Tasks: 160 total,   1 running, 159 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65974296k total, 43507804k used, 22466492k free,   305336k buffers
Swap:  7548924k total,        0k used,  7548924k free,  1480836k cached

わかりました。 「使用された」43GBメモリは実際には実際ではなく、おそらくほとんどがキャッシュされているでしょう。だからそれを掘り下げてみました。

$ free -m
             total       used       free     shared    buffers     cached
Mem:         64428      38845      25582          0        298       1445
-/+ buffers/cache:      37101      27326
Swap:         7371          0       7371

したがって、これは実際には37 GBが使用されており、1445 MBだけがキャッシュされていることを示しています(ここでは20000に似た1445が表示されると予想されます)。上記のウェブサイトを見ると、「キャッシュ」列が一般的にかなり高いことがわかります。だから私は、どのアプリケーションがメモリを使用しているかを確認するためにさらに調査し、次のことを行いました。

    sudo smem -t
      PID User     Command                         Swap      USS      PSS      RSS
9468
    21475 root     python /usr/bin/smem -t            0     6212     6234     6984
     2431 root     /opt/OV/lbin/perf/coda             0     7156     8060    12068
     2213 root     /opt/perf/bin/perfd                0    19056    19485    22032
    20849 root     /opt/shiny-server/ext/node/        0    77244    77321    78616
    21325 atpa     /usr/lib64/R/bin/exec/R --n        0  3729836  3733774  3739520
    21287 atpa     /usr/lib64/R/bin/exec/R --n        0  4060136  4064074  4069820
    -------------------------------------------------------------------------------
       63 11     

                                     0  7947984  7970344  8054032

したがって、Rの2つのアプリケーションは約8GBのメモリを使用します。

上記のリンクの他の記事は、Linuxがメモリを「予約」してキャッシュに保持していることを示しています(たとえば、free -mはキャッシュが「Mem:」行に高い値を持っていることを示しています)。一方、私の場合は実際にそうです。使用中ですが、実際にメモリ使用量を報告するアプリケーションはなく、Linuxがメモリを使用する(キャッシュ/予約?)場所を追跡できないようです。

この記憶はどこに行きましたか? Linuxで使用していると仮定していますが、どこにいるのかわかりません。

/proc/meminfoプログラム

MemTotal:       65974296 kB
MemFree:        24191624 kB
Buffers:          305320 kB
Cached:          1480760 kB
SwapCached:            0 kB
Active:          7769776 kB
Inactive:         215532 kB
Active(anon):    6199392 kB
Inactive(anon):      476 kB
Active(file):    1570384 kB
Inactive(file):   215056 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       7548924 kB
SwapFree:        7548924 kB
Dirty:               116 kB
Writeback:             0 kB
AnonPages:       6172696 kB
Mapped:            47400 kB
Shmem:               652 kB
Slab:             255468 kB
SReclaimable:     225620 kB
SUnreclaim:        29848 kB
KernelStack:        1736 kB
PageTables:        18780 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    40536072 kB
Committed_AS:    6455352 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      247288 kB
VmallocChunk:   34359487760 kB
HardwareCorrupted:     0 kB
AnonHugePages:   2586624 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10240 kB
DirectMap2M:    67098624 kB

答え1

私の問題を見つけたと思います...

私の問題はVMwareのメモリ拡張システムのようです。デフォルトでは、これは、ホストシステムがゲストオペレーティングシステムにメモリ圧力を加えて、他のホストが大量のメモリを使用し始めたときにゲストメモリクォータを消費する方法です。

http://www.vfrank.org/2013/09/18/understanding-vmware-ballooning/

VMware を使用している場合は、次のコマンドを実行します。

vmware-toolbox-cmd stat balloon

これは膨らんだメモリ量を示しています。

私のため

#:vmware-toolbox-cmd stat balloon
32425 MB

他のソース:https://serverfault.com/questions/660080/Detect-memory-ballooning-from-within-the-affected-vm

問題を確認するには、拡張メモリをオフにしてください。

非対話メモリ:https://serverfault.com/questions/528295/unballooning-ram-thats-been-ballooned-by-vmware

関連情報