繁体   English   中英

java.lang.OutOfMemoryError:使用Apache POI读取Excel文件时,超出了GC开销限制

[英]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错误。 您能帮我们造成问题的原因是什么。 我们如何为这个问题提供永久的解决办法。

  1. Excel工作表中的总行数为800
  2. Excel工作表文件大小为68KB

获取错误消息为:

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.

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