0

我正在使用 JBoss 5.1.0.GA 和 Quartz Sheduler。当我的 JBoss 发生 Java 堆空间时,我的 Quartz 调度程序停止。奇怪的是:我的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

4 回答 4

1

你应该明白这是一个错误,而不是异常。基本上,一旦你在 Java 中内存不足,你的进程就会变得不稳定,即使 jboss 继续运行,你也无法真正确定未来程序执行的结果是什么。

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

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

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

希望这可以帮助

于 2012-12-26T05:47:08.343 回答
0

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

于 2012-12-19T18:41:51.977 回答
0

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

于 2012-12-19T18:43:52.607 回答
0

您可以尝试停止和备份+删除 Jboss as's 或 esb's 自动创建的表,如上所示;

JBM_USER JBM_ROLE JBM_POSTOFFICE JBM_MSG JBM_COUNTER ... etc.

然后你应该重新启动服务器。

这解决了我们的问题。

于 2014-03-17T06:40:32.783 回答