简体   繁体   English

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

[英]Java Heap Space on JBoss and Quartz Stopped running

I'm working with JBoss 5.1.0.GA and Quartz Sheduler.我正在使用 JBoss 5.1.0.GA 和 Quartz Sheduler。 When my JBoss occurs a Java Heap Space, my Quartz sheduler stop.当我的 JBoss 出现 Java 堆空间时,我的 Quartz 调度器停止。 The strange thing is: my Jboss is still running after that奇怪的是:我的Jboss还在后面跑

This is my stack这是我的堆栈

    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)

What you should understand that this is an error, not an exception.你应该明白这是一个错误,而不是一个例外。 Basically once you get out of memory in Java your process becomes unstable and you cannot really be sure what will be the results of your program execution in future, even if the jboss continues to run.基本上,一旦您在 Java 中内存不足,您的进程就会变得不稳定,并且即使 jboss 继续运行,您也无法真正确定将来程序执行的结果。

I would suggest to take a memory dump (there is a parameter in JVM that allows to save memory dump once this error occurs).我建议进行内存转储(JVM 中有一个参数允许在发生此错误时保存内存转储)。 Then Analize it with your favourite profiler (VisualVM is free and bundled to JDK, or you can use any other) and try to find why the error occurs, and not how to keep Quartz running.然后用你最喜欢的分析器分析它(VisualVM 是免费的并且捆绑到 JDK,或者你可以使用任何其他的)并尝试找出错误发生的原因,而不是如何保持 Quartz 运行。

It can be application leak, or just too much objects created.可能是应用程序泄漏,也可能是创建的对象过多。 In any case it should be analyzed.在任何情况下都应该对其进行分析。

Of course usually an "instant" solution for this is just increasing memory heap size for your java process, but if you say its not an option, I won't elaborate on this...当然,通常对此的“即时”解决方案只是增加 Java 进程的内存堆大小,但是如果您说这不是一个选项,我不会详细说明...

Hope this helps希望这可以帮助

That's why these are called Error.这就是为什么这些被称为错误。 So it is always good to fix the memory issues and restart the servers as you might experience abnormal behaviors when it recovers from the out of memory errors.因此,修复内存问题并重新启动服务器总是好的,因为当它从内存不足错误中恢复时,您可能会遇到异常行为。

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

You can try to stop and backup+drop Jboss as's or esb's automatically created tables like above;您可以尝试停止并备份+删除 Jboss as's 或 esb's 自动创建的表,如上;

JBM_USER JBM_ROLE JBM_POSTOFFICE JBM_MSG JBM_COUNTER ... etc.

Then you should restart server.然后你应该重新启动服务器。

This solved our problem.这解决了我们的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM