Debian 上的 Java native 内存泄漏

标签 java linux memory native memory-leaks

我在 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 中包含的一种分析工具。可以在此处找到手册。

JVisualVM

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

关于Debian 上的 Java native 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776769/

相关文章:

java - 需要将 Nodejs REST api 服务器移植到 java api 服务器

java - Activiti:如何在 Activiti DB 上保存已挂起 Activiti 流程实例的用户

java - 通过单击另一个 Activity 上的每个按钮来更改单个 WebView Activity 的 URL?

java - 为什么我不能在 eclipse.ini 中将 -Xmx 设置为 1024m?

debugging - 如果图像在只读内存中,调试器如何设置断点?

c - 在C语言中,如何更改指针指向的内存地址?

java - 在运行时覆盖 wicket 中的 session 超时

linux - 在 Debian OS 中安装应用程序

linux - 如何从文件中提取特定字符串(linux)

linux - 什么是抢占/什么是可抢占内核?到底有什么好处呢?