簡體   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