堆内存使用中的PS旧生成内存:GC设置

ami*_*yan 8 java jboss garbage-collection jvm jvm-arguments

在此输入图像描述

以下是我的JVM设置:

 JAVA_OPTS=-server -Xms2G -Xmx2G -XX:MaxPermSize=512M -Dsun.rmi.dgc.client.gcInterval=1200000 -Dsun.rmi.dgc.server.gcInterval=1200000 -XX:+UseParallelOldGC -XX:ParallelGCThreads=2 -XX:+UseCompressedOops  -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jbos88,server=y,suspend=n
Run Code Online (Sandbox Code Playgroud)

问题:总堆内存:2GB旧代:1.4GB(2/3堆)新代:600MB(1/3堆)

Old Gen的内存增长超过其分配大小的70%,即使在100%即1.4GB时也不会受到GC的影响.可以看到它下面的图表达到峰值并且从不是GC,内存的下降是从JConsole强制进入GC的时候.这个问题最终导致Web服务器崩溃.

我缺少什么或错误地设置JVM?

我在这里先向您的帮助表示感谢.

更新我的问题:

在堆分析后,似乎有状态会话bean是主要的嫌疑人: 在此输入图像描述 我们有状态会话bean,它包含Hibernate辅助的持久性逻辑.

Dav*_*kys 6

最终将调用GC,旧的gen几乎从未被调用(因为它非常慢).GC确实运行但它最初只运行在新的gen和幸存者的基础上,它有一个完全不同的清除旧的算法,比新的/幸存者gens慢.

这些数字真的很高,与newgen相比,oldgen永远不会达到很高的数字.我的猜测是你有内存泄漏.

我只能猜测你的程序正在处理大文件,你可能会长时间保存对它们的引用.


ami*_*yan 4

在此输入图像描述有状态会话 Bean 导致 JVM 内存不足。使用 @Remove 注释显式处理它们解决了这个问题。

  • 你是怎样找到它的? (10认同)