3

我在 Tomcat 中部署的 Java 应用程序存在严重问题:

  • 操作系统:Debian 6.06(内核 3.2.13-grsec-xxxx-grs-ipv6)
  • 雄猫:6.0.35
  • JDK:1.6.0_37-b06
  • JVM参数:-Xms3584m -Xmx3584m -XX:MaxPermSize=256m -XX:ThreadStackSize=1024
  • 线程数:200

使用几个小时后,RSS(常驻内存大小)为 13GB,VSZ(虚拟内存大小)为 15 GB。

该应用程序有 2 个 servlet:一个用于一些简单 HTTP 请求的 Spring DispatcherServlet 和一个用于处理 WebServices 的 CXFServlet。该应用程序没有任何自定义本机代码。

使用的磁头约为 2 GB,因此这不是问题。

返回 4 MB 响应的 SOAP 请求会生成 500 MB 的 RSS 增量。运行垃圾收集器对 RSS 没有影响。

您是否知道此内存增加的任何可能原因或任何可以帮助我调查此问题的工具。谢谢。

pmap 输出

映射:14226976K 可写/私有:13772580K 共享:286844K

10 个最大的“匿名”块:

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 ]
4

2 回答 2

0

您可以使用 JVisualVM(Java 附带的一个分析工具)很好地了解 JVM 内部发生的情况。手册可以在这里找到。

视觉虚拟机

还有其他更好的工具(想到 JProfiler 7),但它们通常需要支付许可费。您可以尝试免费试用 JProfiler。

于 2013-02-08T16:16:43.380 回答
0

究竟是什么问题?操作系统是否正在交换?也许你只需要阅读这个问题的公认答案:Linux下Java的虚拟内存使用,使用的内存过多

如果您使用的是 NIO,那么这也可能是堆外内存消耗的来源,如下所述: 为什么即使堆等大小稳定,Sun JVM 仍会继续消耗更多的 RSS 内存?

于 2013-02-08T16:36:40.483 回答