当前位置: 首页 > 知识库问答 >
问题:

Debian上的Java本机内存泄漏

邹涵畅
2023-03-14

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

  • 操作系统:Debian 6.06(内核3.2.13-grsec-xxxx-grs-ipv6)
  • Tomcat:6.0.35
  • JDK:1.60_37-b06
  • JVM params:-Xms3584m-Xmx3584m-XX: MaxPermsize=256m-XX: ThreadStacksize=1024
  • 线程数:200

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

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

使用的磁头大约为2GB,所以这不是问题。

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

你知道内存增加的任何可能原因,或者任何可以帮助我调查问题的工具吗。谢谢

pmap输出

映射:14226976K可写/专用:13772580K共享:286844K

10个最大的“anon”区块:

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 ]

共有2个答案

濮阳钟展
2023-03-14

到底是什么问题?操作系统交换吗?也许你只需要阅读这个问题的公认答案:虚拟内存使用从Java下Linux,使用太多内存

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

长孙雅志
2023-03-14

使用java附带的分析工具JVisualVM,您可以很好地了解JVM内部的情况。手册可以在这里找到。

JVisualVM

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

 类似资料:
  • 我在哪里可以找到libc_malloc_debug_leak。还有libc_malloc_debug_qemu。那么对于不同的Android版本(冰淇淋三明治、果冻豆、KitKat)和不同的设备(Galaxy Nexus、Nexus 7、Nexus 10)呢?

  • 我们有一个运行在Mule上的java应用程序。我们将XMX值配置为6144M,但总的内存使用量却在不断攀升。前几天,在我们主动重启它之前,它已经接近20 GB了。 jps命令显示: jstat命令显示: 这似乎告诉我,因为Xmx和Xms被设置为相同的值,所以java堆只有一个6291456K的分配。其他分配不是java堆内存。它们是什么?它们被分配成相当大的块。

  • 本文向大家介绍Java 内存泄漏,包括了Java 内存泄漏的使用技巧和注意事项,需要的朋友参考一下 在Java中,垃圾回收(析构函数的工作)是使用垃圾回收自动完成的。但是,如果代码中有引用它们的对象怎么办?它无法取消分配,即无法清除其内存。如果这种情况一再发生,并且创建或引用的对象根本没有被使用,它们就会变得无用。这就是所谓的内存泄漏。 如果超过了内存限制,则程序将通过抛出错误(即“ OutOfM

  • 出现此错误,JSP页面变为空白(白色): Jan9, 2013 7:30:39PMorg.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE:Web应用程序[/MyWebApp]创建了一个ThreadLocal,其中键的类型为[net.sourceforge.jtds.jdbc.DateTime1美元](值[net

  • 问题内容: 我发现使用是众所周知的与相关的内存问题。 使用中是否存在内存泄漏? 如果是,解决方法是什么? 以下链接显示了Java中子字符串的正确用法。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4513622 另外一个博客谈论子字符串中可能的MLK。 http://nflath.com/2009/07/the-dangers-of- st

  • 问题内容: 好的,所以我的程序有很多(〜300)线程,每个线程都与中央数据库通信。我创建了一个与数据库的全局连接,然后每个线程进行其业务创建语句并执行它们。 一路上的某个地方,我发生了大量内存泄漏。在分析堆转储之后,我看到com.mysql.jdbc.JDBC4Connection对象为70 MB,因为它在“ openStatements”(哈希映射)中有800,000个项目。在某个地方,它不能正