下面是Windows下Tomcat服務器日志中出現的異常:
這種問題的異常解釋是什么,我就不再描述了,百度有各種解說,只說一下在我的運行環境下怎么解決這個問題,不讓問題出現,功能正常運行起來的方法。項目是一個簡單的springboot框架,在eclipse中開發調試,使用springboot內置Tomcat運行項目,頁面測試功能OK,沒有出現以上所述異常。將項目打為war包部署到Tomcat8的webapps目錄下,Tomcat8已設置成本地Windows系統服務,啟動Tomcat8服務,瀏覽器打開項目運行查看不做分頁的查詢所有數據顯示,我這里的數據存在30w多條,頁面刷新不出來Tomcat8日志Log中出現以上異常;點擊導出所有數據的Excel表單也會出現以上描述的異常,而在eclipse中內置Tomcat8下運行是可以正常顯示信息和導出數據的。
百度解決方案:
1、在Tomcat8的bin目下catalina.bat文件如下圖位置加代碼:set JAVA_OPTS=-Xms512m -Xmx512m 重啟后無效,依然后出現異常。
2、在Tomcat8中bin目錄下打開tomcat8w.exe,選擇Java項,修改Initial memory pool和Maxmum memmory pool的值,如下圖:
重啟Tomcat服務,打運行項目,測試功能沒有出現異常,一切功能運行正常,問題解決。。。。。。
總結:百度中的一個說法,java.lang.OutOfMemoryError: GC overhead limit exceeded 錯誤只在連續多次 GC 都只回收了不到2%的極端情況下才會拋出。假如不拋出 GC overhead limit
錯誤會發生什么情況呢? 那就是GC清理的這么點內存很快會再次填滿, 迫使GC再次執行. 這樣就形成惡性循環, CPU使用率一直是100%, 而GC卻沒有任何成果. 系統用戶就會看到系統卡死 - 以前只需要幾毫秒的操作, 現在需要好幾分鍾才能完成。
百度中的另一個說法,使用Java程序從數據庫中查詢大量的數據時出現異常:java.lang.OutOfMemoryError: Java heap space 在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.JVM在啟動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。
貼一個其他博主的解決方案:
在tomcat in的catalina.bat里加
set JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true
256和512分別是MIN和MAX內存
在eclipse中的
windows->preferences..->tomcat->jvm..->jvm那一個文本框里,添加-Xms256m -Xmx512m
最后:貼一下幫助解決問題的博主說的解決方案,https://bbs.csdn.net/topics/340266541 以下是原話,希望也能幫到你。。。。。。