我在 Tomcat 中部署的 Java 应用程序存在严重问题:
- 操作系统:Debian 6.06(内核 3.2.13-grsec-xxxx-grs-ipv6)
- Tomcat :6.0.35
- JDK:1.6.0_37-b06
- JVM 参数:-Xms3584m -Xmx3584m -XX:MaxPermSize=256m -XX:ThreadStackSize=1024
- 线程数:200
使用几个小时后,RSS(常驻内存大小)为 13GB,VSZ(虚拟内存大小)为 15GB。
该应用程序有 2 个 servlet:一个用于一些简单 HTTP 请求的 Spring DispatcherServlet 和一个用于处理 Web 服务的 CXFServlet。该应用程序没有任何自定义 native 代码。
使用的磁头大约为 2 GB,所以这不是问题。
返回 4 MB 响应的 SOAP 请求会使 RSS 增加 500 MB。运行垃圾收集器对 RSS 没有影响。
您是否知道此内存增加的任何可能原因或可以帮助我调查此问题的任何工具。谢谢。
pmap 输出
映射:14226976K 可写/私有(private):13772580K 共享:286844K
10 个最大的“匿名”区 block :
0000000720000000 3670016 rw--- 0000000000000000 000:00000 [ anon ]
0000000000601000 2529344 rw--- 0000000000000000 000:00000 [ anon ]
0000000710000000 173504 rw--- 0000000000000000 000:00000 [ anon ]
00007f7484000000 131072 rw--- 0000000000000000 000:00000 [ anon ]
00007f7414000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7424000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7434000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7494000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f737c000000 131024 rw--- 0000000000000000 000:00000 [ anon ]
00007f738c000000 131024 rw--- 0000000000000000 000:00000 [ anon ]
最佳答案
您可以使用 JVisualVM 深入了解 JVM 内部发生的情况,JVisualVM 是 java 中包含的一种分析工具。可以在此处找到手册。
还有其他更好的工具(我想到了 JProfiler 7),但它们通常需要支付许可费。您可以试用 JProfiler 的免费试用版。
关于Debian 上的 Java native 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776769/