![内存泄漏追踪](https://linux22.com/image/80041/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E8%BF%BD%E8%B8%AA.png)
我有一台运行 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
我可以做什么来帮助诊断“丢失”内存的位置,以便解决问题。任何建议表示赞赏。
谢谢!