经过一番搜索,只发现那些没有正确解释“缓存”图形的人的帖子后,我决定问这个问题。
我手头上有一些服务器,它们的行为很奇怪。也就是说,它们的 RAM 使用率非常高,却没有明显的原因。好像一个不可见的进程占用了大量“已用”RAM(我的意思是“已用”)。
以下是一些信息:
- 所有服务器都运行 SLES 11
- 内核是3.0.76
- 所有服务器都作为 VMWare ESX 基础架构下的客户机运行
- 我没有设置服务器,对操作系统的选择没有发言权,也没有访问虚拟化基础设施的权限
- 所有服务器的设置都类似,并且它们运行相同的软件集(它是一个集群,是的,我知道,虚拟化集群,等等,正如所说:我对此没有发言权)
还有一些 shell 输出:
root@good-server:# free -m
total used free shared buffers cached
Mem: 15953 14780 1173 0 737 8982
-/+ buffers/cache: 5059 10894
Swap: 31731 0 31731
root@good-server:# python ps_mem.py
[... all processes neatly listed ...]
---------------------------------
4.7 GiB
=================================
root@bad-server:# free -m
total used free shared buffers cached
Mem: 15953 15830 123 0 124 1335
-/+ buffers/cache: 14370 1583
Swap: 31731 15 31716
root@bad-server:# python ps_mem.py
[... all processes neatly listed ...]
---------------------------------
4.0 GiB
=================================
正常服务器的 /proc/meminfo 内容
MemTotal: 16336860 kB
MemFree: 112356 kB
Buffers: 138384 kB
Cached: 1145208 kB
SwapCached: 1244 kB
Active: 4344336 kB
Inactive: 1028744 kB
Active(anon): 3706796 kB
Inactive(anon): 382724 kB
Active(file): 637540 kB
Inactive(file): 646020 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 32493560 kB
SwapFree: 32477728 kB
Dirty: 1248 kB
Writeback: 0 kB
AnonPages: 4087776 kB
Mapped: 60132 kB
Shmem: 156 kB
Slab: 274968 kB
SReclaimable: 225864 kB
SUnreclaim: 49104 kB
KernelStack: 4352 kB
PageTables: 16400 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 40661988 kB
Committed_AS: 6576912 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 311400 kB
VmallocChunk: 34359418748 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 73728 kB
DirectMap2M: 16703488 kB
坏服务器的 /proc/meminfo 内容
MemTotal: 16336860 kB
MemFree: 1182320 kB
Buffers: 756244 kB
Cached: 8695688 kB
SwapCached: 0 kB
Active: 13499680 kB
Inactive: 843208 kB
Active(anon): 4853460 kB
Inactive(anon): 37372 kB
Active(file): 8646220 kB
Inactive(file): 805836 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 32493560 kB
SwapFree: 32493560 kB
Dirty: 1268 kB
Writeback: 0 kB
AnonPages: 4890180 kB
Mapped: 84672 kB
Shmem: 252 kB
Slab: 586084 kB
SReclaimable: 503716 kB
SUnreclaim: 82368 kB
KernelStack: 5176 kB
PageTables: 19684 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 40661988 kB
Committed_AS: 6794180 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 311400 kB
VmallocChunk: 34359419468 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 112640 kB
DirectMap2M: 16664576 kB
TL;DR - 如果将它们并排比较,主要区别如下(BADserver - GOODserver):
MemFree -1070 MB
Cached -7550 MB
Active -9155 MB
Active(anon) -1147 MB
Active(file) -8009 MB
AnonPages - 802 MB
其他差异相当小,在人们可以预料的范围内(但你可以自己看看)
如您所见,在良好的服务器上,所有进程的所有 RES 和 SHR 内存的总和与“已用 -/+ 缓冲区/缓存”值的输出基本一致free -m
- 这正是您所期望的,对吗?
现在看看坏的服务器:free -m
输出的“used -/+ buffers/cache”值大约是你预期的 3 倍,总结一下所有内容ps
就可以告诉你。
这也与/proc/meminfo
我所说的相符。
到目前为止,我都不知道这是怎么可能的。这到底是怎么回事?
答案1
我认为你可能有一个VMware 内存膨胀问题。有可能 vSphere 基础架构中的内存过量使用过高。如果不访问 vSphere vCenter,您将无法修复此问题,但您应该能够从虚拟机中检测到此问题(假设安装了 vmtools):
您能发布一下输出吗vmware-toolbox-cmd stat balloon
?
此外,您已分配 16GB RAM。请询问任何人是如果对相关虚拟机设置了任何手动 RAM 限制,则可以控制基础设施。