我们在某些服务器上遇到了一些
Linux内存使用问题. free,top,ps和vmstat都显示261M免费1G(~25%).但是,在顶部显示每个进程显示的内存量表明我们应该使用非常少的内存.缓存在缓冲区中只有大约48M和0K,因此总内存可用309M,仍然比我们应该的少得多.我在
http://www.workxpress.com/sites/default/files/top.png中包含了我们最高输出的屏幕截图(按内存排序).这是我在serverfault上的第一篇文章,所以我无法在我的帖子中包含图片:-P
在尝试了几次谷歌搜索之后,我就不会比我更进一步.大多数结果告诉我同样的事情,内存被用于缓存和缓冲区(我已经知道).但顶级和免费显然没有表现出来.任何帮助是极大的赞赏.
谢谢,
JamesArmes
更新:
我从最近出现的这个问题中包含了我们的/ proc / meminfo:
MemTotal: 1028636 kB MemFree: 30056 kB Buffers: 0 kB Cached: 28732 kB SwapCached: 154684 kB Active: 265328 kB Inactive: 19416 kB SwapTotal: 2097144 kB SwapFree: 1758196 kB Dirty: 36 kB Writeback: 0 kB AnonPages: 240260 kB Mapped: 11996 kB Slab: 23008 kB SReclaimable: 11976 kB SUnreclaim: 11032 kB PageTables: 5636 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 2611460 kB Committed_AS: 1099080 kB VmallocTotal: 34359738367 kB VmallocUsed: 7204 kB VmallocChunk: 34359731091 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
下面是我们的/etc/sysctl.conf(删除了所有注释行):
kernel.printk = 4 4 1 7 kernel.maps_protect = 1 fs.inotify.max_user_watches = 524288 vm.mmap_min_addr = 65536 net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1
我希望这有帮助.
解决方法
由于我看到vmware-guestd正在运行,我将假设这是一个VM.假设是ESX,请进入VIC并右键单击该计算机.单击编辑设置…,然后选择资源选项卡.单击“内存”并确保在“限制”下选中“无限制”.
可能发生的情况是您对内存有限制,当机器使用大量内存(接近或超过限制)时,vmware来宾工具会将内存“使用”而不是将其释放回ESX,以防万一再次需要它.
更新:
“服务器允许您仅在cpu和内存预留时启动虚拟机
可用…当未使用资源时,ESX Server主机使其可供其他虚拟机使用.“
http://www.vmware.com/pdf/vi3_esx_resource_mgmt.pdf
它通过“气球”驱动程序(vmmemctl)执行此操作,该驱动程序是访客工具的一部分.假设您的机器正在使用100MB的RAM,那么您运行一些程序并且它会跳转到500MB.现在你停止该程序并期望RAM恢复到100MB.但事实并非如此.这是因为,为了让ESXi从客户操作系统回收内存(即使有预订也会这样做),它必须使用气球驱动程序.为了使操作系统“行动”,就好像它具有更少的内存,气球驱动程序“使用”ESXi想要的内存,以便操作系统无法使用它.
IOW,即使预订,客人只使用尽可能多的主机RAM.当它使用更多时,ESX会分配更多主机RAM,客户现在认为它总是可用.为了“说服”客人新的公羊再次消失,气球司机将其用完.保留仅仅意味着“除非物理机器有1GB可自由加载客户端,否则不要启动虚拟机”而不是“给客户1GB是否使用它”.