Quartz Scheduler抛出java.lang.OutOfMemoryError: GC overhead limit exceeded
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at com.mysql.jdbc.SingleByteCharsetConverter.toString(SingleByteCharsetConverter.java:327)
at com.mysql.jdbc.ResultSetRow.getString(ResultSetRow.java:819)
at com.mysql.jdbc.ByteArrayRow.getString(ByteArrayRow.java:70)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5816)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5693)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5733)
我们的应用程序有1.5GB的堆空间,但它仍然会抛出它。我做了剖析,无法在代码中发现任何泄漏。请帮我解决这个问题
答案 0 :(得分:0)
这很可能是由应用程序中的内存泄漏引起的。有关GC错误消息的原因,请参阅this post。简单地说,你的应用程序正在耗尽堆空间,并且GC正在努力释放一些空间直到它放弃,因为JVM花了太多时间做GC而不是做其他“有用”的事情。
我建议您从正在运行的JVM生成一个heapdump,并使用一个可用的JVM堆分析工具对其进行分析(例如,Eclipse MAT非常好)。您可以使用jconsole来监视JVM堆的使用情况,并在JVM堆全部用完之前的某个时刻使用heapdump。
答案 1 :(得分:-1)
当您的应用程序耗尽了几乎所有可用内存并且GC一再无法清除它时,将显示“java.lang.OutOfMemoryError:GC开销超出限制”错误。您可以尝试为流程提供更多内存。同样,这就像在启动脚本中添加(或增加,如果存在)一个参数一样简单:
java -Xmx1024m< com.yourcompany.YourClass /代码>
或者您可以免费试用Plumbr。当我们找到java.lang.OutOfMemoryError的原因时,您将看到问题的确切位置以及解决方案指南。