JBoss和Quartz上的Java堆空间停止运行

时间:2012-12-19 18:39:46

标签: java jboss heap quartz-scheduler space

这是我在StackOverflow上的第一篇文章,

我正在使用JBoss 5.1.0.GA和Quartz Sheduler。 当我的JBoss出现Java堆空间时,我的Quartz sheduler停止了。 奇怪的是:我的Jboss仍然在那之后运行

这是我的堆栈

    2012-12-19 10:32:21,296 ERROR [STDERR] (AOPListner) Exception in thread "AOPListner" 
2012-12-19 10:32:26,531 ERROR [STDERR] (AOPListner) java.lang.OutOfMemoryError: Java heap space
2012-12-19 10:32:26,531 ERROR [STDERR] (AOPListner)     at java.util.WeakHashMap.put(WeakHashMap.java:416)
2012-12-19 10:32:28,125 ERROR [STDERR] (AOPListner)     at org.jboss.aop.AspectManager.getAdvisors(AspectManager.java:546)
2012-12-19 10:32:29,703 ERROR [STDERR] (AOPListner)     at org.jboss.console.plugins.AOPLister$RefreshPoller.run(AOPLister.java:891)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread) Exception in thread "DefaultQuartzScheduler_QuartzSchedulerThread" 
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread) java.lang.OutOfMemoryError: Java heap space
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronExpression.addToSet(CronExpression.java:852)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronExpression.storeExpressionVals(CronExpression.java:483)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronExpression.buildExpression(CronExpression.java:376)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronExpression.<init>(CronExpression.java:248)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronExpression.clone(CronExpression.java:1375)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.CronTrigger.clone(CronTrigger.java:431)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.simpl.RAMJobStore.acquireNextTrigger(RAMJobStore.java:1161)
2012-12-19 10:32:45,593 ERROR [STDERR] (DefaultQuartzScheduler_QuartzSchedulerThread)   at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:233)

4 个答案:

答案 0 :(得分:1)

您应该了解这是一个错误,而不是例外。基本上,一旦你的Java内存不足,你的过程就会变得不稳定,你无法确定将来程序执行的结果是什么,即使jboss继续运行。

我建议采用内存转储(JVM中有一个参数,允许在发生此错误时保存内存转储)。然后使用您最喜欢的探查器Analize它(VisualVM是免费的并捆绑到JDK,或者您可以使用任何其他)并尝试找出错误发生的原因,而不是如何保持Quartz运行。

可能是应用程序泄漏,或者创建了太多对象。在任何情况下都应该进行分析。

当然,通常一个“即时”的解决方案就是增加你的java进程的内存堆大小,但是如果你说它不是一个选项,我就不会详细说明......

希望这有帮助

答案 1 :(得分:0)

这就是为什么这些被称为错误。因此,修复内存问题并重新启动服务器总是好的,因为当它从内存不足错误中恢复时可能会遇到异常行为。

答案 2 :(得分:0)

尝试为jboss服务器分配更多内存并重新启动它

答案 3 :(得分:0)

您可以尝试停止并备份+删除Jboss as或esb自动创建的表格如上所述;

  

JBM_USER JBM_ROLE JBM_POSTOFFICE JBM_MSG JBM_COUNTER ... etc.

然后你应该重启服务器。

这解决了我们的问题。