内存泄漏追踪

内存泄漏追踪

我有一台运行 Red Hat Enterprise Linux Server 版本 6.7 的服务器。服务器运行许多 java 进程,包括带有 nginx Web 服务器的 tomcat 服务器。服务器分配有 12 GB 的 RAM。

立即启动后,服务器显示正在使用 1289 MB 的 RAM(空闲 -m -/+ 缓冲区/缓存行)...输出如下。

服务器启动时的“ps aux”显示所有进程的内存使用量总计 1,290,996 k 内存(RSS 列)...这 2 个数字非常接近。

经过 2 天的正常运行时间后,free -m 现在显示我们使用了 10,698 MB 内存,而所有进程的“ps aux”总计高达 8,345,352 k。

我们试图一一停止/杀死每个进程,即使运行的东西数量绝对是最低限度(没有 Tomcat、没有 Java、没有 Nginx),我们也永远无法恢复“丢失”的 ~2GB 内存。我们发现恢复丢失的内存是重新启动服务器。如果服务器超过 3-4 天没有重新启动,它就会开始占用交换空间,最终导致 CPU 使用率过高,并且在其上运行的 Java 应用程序会陷入停滞状态。

我还应该提到,该服务器是使用 VMWare 作为虚拟机运行的。

启动时释放 -m 输出:

             total       used       free     shared    buffers     cached
Mem:         11852       1787      10064          0         28        468
-/+ buffers/cache:       1289      10562 
Swap:         8191          0       8191 

正常运行 2 天后释放 -m 输出

             total       used       free     shared    buffers     cached
Mem:         11852      11625        226          0        146        779
-/+ buffers/cache:      10698       1153 
Swap:         8191         43       8148 

我可以做什么来帮助诊断“丢失”内存的位置,以便解决问题。任何建议表示赞赏。

谢谢!

相关内容