Linux

未顯示在記憶體中時跟踪 Linux 記憶體使用情況

  • December 15, 2017

在你拿出你的干草叉之前,我在追踪記憶體進入 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

所以這表明它確實使用了 37GB,並且只有 1445MB 被記憶體(這是我希望看到 1445 類似於 20000 的地方)。我在上面連結的網站顯示“記憶體”列通常很高。因此,我進一步探勘並執行以下操作來檢查正在使用記憶體的應用程序。

   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 的兩個應用程序正在使用約 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

我想我找到了我的問題…

我的問題似乎是 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

引用自:https://unix.stackexchange.com/questions/323186