
以下是我的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辅助的持久性逻辑.
有没有办法找出
java.lang.Class
Run Code Online (Sandbox Code Playgroud)
那是一个
@Entity(name = "X")?
Run Code Online (Sandbox Code Playgroud)
换句话说,使用Entity Name来获取Entity的类名,当然是在运行时:)