我在群集中有两台服务器,预计两者都会获得相同数量的客户端请求。
两台服务器上的服务器设置完全相同。
JAVA Memory arguments: -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:SurvivorRatio=8 -Xnoclassgc -XX:+DisableExplicitGC -verbose:gc -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps /opt/app/t1grn1m1/app1/jdk150_07/bin/java -server -Xms1024m
-Xmx1024m -XX:PermSize = 128m -XX:MaxPermSize = 256m -XX:NewSize = 512m -XX:MaxNewSize = 512m -XX:SurvivorRatio = 8 -Xnoclassgc -XX:+ DisableExplicitGC -verbose:gc -XX:+ UseParNewGC -XX:+ CMSParallelRemarkEnabled -XX:+ UseConcMarkSweepGC -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -da -Dplatform.home = / opt / app / t1grn1m1 / apps / bea
但是,其中一个服务器崩溃会导致一些SQL错误。
下面是完整的堆栈跟踪。
<Oct 2, 2012 3:28:58 PM PDT> <Error> <Kernel> <BEA-000802> <ExecuteRequest failed java.lang.OutOfMemoryError: PermGen space.
java.lang.OutOfMemoryError:PermGen空间 &GT; 1266520.476:[Full GC 1266520.477:[CMS1266523.115:[CMS-concurrent-mark:2.641 / 2.643 secs](并发模式失败): 228752K-> 228742K(524288K),9.2042319秒] 229168K-> 228742K(996160K), [CMS Perm:262143K-> 262141K(262144K)],9.2044677 secs] 1266529.694:[Full GC 1266529.694:[CMS(并发模式故障):228742K-> 228748K(524288K),6.5069209 secs] 229159K-> 228748K(996160K), [CMS Perm:262143K-> 262143K(262144K)],6.5072224 secs] 1266536.208:[GC [1 CMS-initial-mark:228748K(524288K)] 228748K(996160K),0.0310896 secs] 1266536.239:[CMS-concurrent-mark-start] 1266536.240:[完整GC 1266536.240:[CMS1266538.831:[CMS-concurrent-mark:2.591 / 2.592秒](并发模式故障): 228748K-> 228748K(524288K),9.0993019秒] 228748K-> 228748K(996160K), [CMS Perm:262143K-> 262143K(262144K)],9.0995301 secs] 1266545.345:[Full GC 1266545.345:[CMS(并发模式故障):228748K-> 228748K(524288K),6.5591523秒] 228748K-> 228748K(996160K), [CMS Perm:262143K-> 262143K(262144K)],6.5643563 secs] 1266551.915:[GC [1 CMS-initial-mark:228748K(524288K)] 228748K(996160K),0.0254620 secs] 1266551.941:[CMS-concurrent-mark-start]
永久生成已满......增加MaxPermSize(当前容量 设置为:268435456字节)
1266551.944:[Full GC 1266551.944:[ParNew:576K-> 32K(471872K),0.0211583 secs] 229324K-> 228780K(996160K),0.0213028 secs]
永久生成已满......增加MaxPermSize(当前容量 设置为:268435456字节)
1266551.987:[Full GC 1266551.987:[CMS1266554.568:[CMS-concurrent-mark:2.603 / 2.627 secs](并发模式失败): 228748K-> 228752K(524288K),9.1860773秒] 229758K-> 228752K(996160K), [CMS Perm:262143K-> 262133K(262144K)],9.1863369 secs] [] | [] | [02 Oct 2012 15:29:29651] | [com.granite.middle.session.PingBean] | [计时器-8] | [ERROR] | [更新 抓住异常]
java.sql.SQLException:内部错误:无法获取XAConnection weblogic.common.resourcepool.ResourceDisabledException:池mypool是 禁用,无法为应用程序分配资源.. 在weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1325) 在weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:441) 在weblogic.jdbc.jta.DataSource.connect(DataSource.java:397) 在weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
java.sql.SQLException:内部错误:无法获取XAConnection weblogic.common.resourcepool.ResourceDisabledException:池mypool是 禁用,无法为应用程序分配资源.. 在weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1325) 在weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:441) 在weblogic.jdbc.jta.DataSource.connect(DataSource.java:397) 在weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359) 1266561.186:[Full GC 1266561.186:[CMS(并发模式故障):228752K-> 228766K(524288K),6.5952689秒] 229970K-> 228766K(996160K), [CMS Perm:262143K-> 262142K(262144K)],6.5956508 secs] 1266567.788:[GC [1 CMS-initial-mark:228766K(524288K)] 228766K(996160K),0.0217579 secs] 1266567.810:[CMS-concurrent-mark-start] 1266567.812:[Full GC 1266567.812:[CMS1266570.422:[CMS-concurrent-mark:2.610 / 2.612 secs](并发模式失败): 228766K-> 228767K(524288K),9.2150367秒] 228958K-> 228767K(996160K), [CMS Perm:262143K-> 262143K(262144K)],9.2152706 secs] 1266577.033:[完整GC 1266577.033:[CMS(并发模式故障)
你能告诉我这次事故的原因是什么吗?我需要解释。
答案 0 :(得分:1)
您应该通过增加-XX:MaxPermSize=256m
来增加PermGen空间。但是,您应该查看您的应用程序 - 可能使用分析器 - 就好像您经常得到这个可能意味着您有一些内存泄漏。当垃圾收集器无法再回收PermGen空间的内存时,通常会发生java.lang.OutOfMemoryError: PermGen space
。你在使用Tomcat吗?
答案 1 :(得分:0)
我会验证两个服务器通过查看日志获得相同数量的请求确实是真的。负载平衡器等很容易配置错误。
如果请求的数量大致相同,请查看请求本身,有些比其他请求更贵。
答案 2 :(得分:0)
您的垃圾收集器日志明确指出您的永久生成不足([CMS Perm:262143K-> 262141K(262144K)],9.2044677秒]。首先,你应该通过设置-XX:MaxPermSize = 512m来增加它。当然,如果您的机器上有这么多内存,那就是这样。
其次,您应该调查消耗永久生成的内容,并查找可能的类加载器泄漏或PermGen的类似问题。您可以将Plumbr添加到服务器以监视可能的内存泄漏。