这是我在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)
答案 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.
然后你应该重启服务器。
这解决了我们的问题。