我搜索过“我的 Linux 内存在哪里?”的问题,但是我找不到与我的泄漏类似的情况:
- OEL 6.3 x86_64 Linux,配备 6GB RAM
- 在没有运行任何主要组件(2 个 tomcat、MySQL、基于 Grizzly 的 Web 容器)的情况下,系统某些未知部分占用了大约 2.3GB 的内存
- 几乎只有几 MB 的文件缓存
- 几乎没有几 MB 的 slab 缓存
- 即使重启后
- 系统是 VMWare 上的虚拟主机
以下是按 RES 降序排序的顶级输出:
top - 15:57:26 up 3:26, 1 user, load average: 0.27, 0.26, 0.76
Tasks: 192 total, 1 running, 191 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 5993276k total, 2257256k used, 3736020k free, 23772k buffers
Swap: 4063224k total, 89644k used, 3973580k free, 98960k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3236 root 20 0 123m 8384 1520 S 0.0 0.1 0:01.05 Xorg
3373 gdm 20 0 369m 3840 2464 S 0.0 0.1 0:00.69 gdm-simple-gree
3358 gdm 20 0 337m 2916 1940 S 0.0 0.0 0:05.30 gnome-settings-
16380 root 20 0 157m 2708 2192 S 0.0 0.0 0:00.01 su
20174 root 20 0 157m 2704 2192 S 0.0 0.0 0:00.01 su
免费-m:
-/+ buffers/cache: 2083 3769
/proc/meminfo 中的slab信息:
MemTotal: 5993276 kB
MemFree: 3722140 kB
Slab: 50724 kB
任何关于如何解决这 2 场演出的提示都将不胜感激!
答案1
许多人忽略的一件事,尤其是在 VMware 上运行 Tomcat 和其他基于 Java 的应用程序时,那就是该软件对 VMware 内存分配的影响。
首先:
- 您是否有权访问主机/集群的 vSphere 或 vCenter 管理?
- 您安装了 VMware 工具吗?
在以下情况下,我经常会看到 Linux VM 内部出现无法解释的内存问题:
- 主机级别的 RAM 极度过度使用。
- 主机/集群上的内存膨胀严重。
- 如果虚拟机上有 RAM 限制。(例如,分配给虚拟机 6GB,但主机限制为 4GB)
- 资源池/共享设计不良。
基本上,您需要在主机/集群级别寻找争用。
答案2
尝试
grep VmPea /proc/*/status|sort -n -k+2 |tail
如下面链接中的多项式所示
你确实读过Serverfault 关于 Linux 中内存使用情况的典型问题正确的?
另外,你可以通过按 H 键添加线程top
(至少对于我在 ubuntu 12.04 上来说)
更多调试:
搜索ps_mem.py
一个Python 内存脚本
通过它,您可以看到哪个进程实际上正在使用 RAM(私有/共享),虽然不是 100% 准确,但我想对于您的“问题”来说已经足够了。
其实还有很多其他方法可以检测出问题,但我建议首先检查它是否真的被某些东西使用,而不仅仅是缓冲,这是完全正常的。