[英]java.lang.OutOfMemoryError: GC overhead limit exceeded Error while Reading Macro enabled excel sheet through Apache POI
[英]java.lang.OutOfMemoryError: GC overhead limit exceeded" while reading excel file using apache POI
我们正在使用Apachi POI从excel文件中读取数据,其中有800行用于Selenium自动化测试用例的输入数据。 我们已经使用jenkins进行配置并执行了批处理作业,并且可以正常工作超过一年。 但现在它显示错误“线程“主”中的异常java.lang.OutOfMemoryError:超出了GC开销限制”。 当我们将JVM内存大小增加为1024 MB时,它可以正常工作。 Excel文件大小仅为68KB。 但显示GC错误。 您能帮我们造成问题的原因是什么。 我们如何为这个问题提供永久的解决办法。
获取错误消息为:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded".
此错误消息...
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded".
...表示您的程序/脚本忙于垃圾回收,并且JVM无法执行任何其他任务。
根据Excessive GC Time and OutOfMemoryError
,如果总时间的 98%用于垃圾回收并且少于2%的堆内存得以恢复,则JVM会引发OutOfMemoryError错误。 出现此错误是为了防止应用程序长时间运行,而在没有堆内存的情况下却没有任何进展。
通过在命令行中添加以下选项来关闭显示此错误消息的功能:
-XX:-UseGCOverheadLimit
通过命令行以如下方式增加堆大小:
-Xmx1g
注意 :无论计算机上安装了多少内存,默认最大堆大小都不能超过1GB 。
通过命令行将并发集合微调为:
-XX:CMSInitiatingOccupancyFraction=<N>
启用增量模式:
-XX:+CMSIncrementalMode
启用自动定步:
-XX:+CMSIncrementalPacing
最后,请确保程序中没有内存泄漏 。
您可以在错误java.lang.OutOfMemoryError中找到详细的讨论:超出了GC开销限制
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.