gpt4 book ai didi

java - 如何追踪 Jboss AS 5.1 中的非堆 JVM 内存泄漏?

转载 作者:搜寻专家 更新时间:2023-11-01 00:58:57 25 4
gpt4 key购买 nike

升级到 JBoss AS 5.1 后,运行 JRE 1.6_17,CentOS 5 Linux,JRE 进程在大约 8 小时后内存不足(在 32 位系统上达到 3G 最大值)。这发生在集群中的两台服务器上,负载适中。 Java 堆使用量稳定下来,但总体 JVM 占用空间仍在继续增长。线程数非常稳定,最多可达到 370 个线程,线程堆栈大小设置为 128K。

JVM 的占用空间达到 3G,然后它就死了:

java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?  Internal Error (allocation.cpp:117), pid=8443, tid=1667668880  Error: ChunkPool::allocate

当前的 JVM 内存参数是:

-Xms1024m -Xmx1024m -XX:MaxPermSize=256m -XX:ThreadStackSize=128

鉴于这些设置,我预计进程足迹稳定在 1.5G 左右。相反,它一直在增长,直到达到 3G。

似乎没有一个标准的 Java 内存工具可以告诉我 JVM 的 native 端是什么占用了所有这些内存。 (Eclipse MAT、jmap 等)。 PID 上的 Pmap 只是给了我一堆 [ anon ] 分配,这些分配并没有多大帮助。据我所知,当我没有加载 JNI 或 java.nio 类时,就会出现此内存问题。

如何对 JVM 的 native /内部端进行故障排除以找出所有非堆内存的去向?

谢谢!我的想法很快就用完了,每 8 小时重新启动应用服务器并不是一个很好的解决方案。

最佳答案

正如@Thorbjørn 所建议的那样,分析您的应用程序。

如果您需要更多内存,可以选择 64 位内核和 JVM。

关于java - 如何追踪 Jboss AS 5.1 中的非堆 JVM 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2052446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com