未顯示在記憶體中時跟踪 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
所以這表明它確實使用了 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