可貴遇到一次java堆內存溢出(內心想着,終於能夠來一次jvm性能優化了$$)html
先看下報錯信息,java
java.lang.OutOfMemoryError: GC overhead limit exceeded
錯誤就是發出了這樣的信號: 執行垃圾收集的時間比例太大, 有效的運算量過小. 默認狀況下, 若是GC花費的時間超過 98%, 而且GC回收的內存少於 2%, JVM就會拋出這個錯誤。數據庫
形成這個問題的緣由多是項目裏某個地方定義的太多的map,list對象,或者一次從數據庫中查詢的數據量過大。
資料來源:OutOfMemoryError系列(2): GC overhead limit exceededwindows
查看tomcat服務啓動信息,默認tomcat的內存分配大小是初始化128,最大值爲256MBtomcat
根據網上教程,在tomcat\bin\catalina.bat文件性能優化
rem ----- Execute The Requested Command --------------------------------------- echo Using CATALINA_BASE: "%CATALINA_BASE%" echo Using CATALINA_HOME: "%CATALINA_HOME%" echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
在Execute The Request Command註釋下面添加參數,設置jvm內存最大值服務器
set "JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m"
配置完以後再次查看啓動日誌tomcat/logs/catalina.2019-07-08.logjvm
發現日誌裏顯示,jvm參數仍是128 - 256 沒變化post
繼續查詢資料,咱們修改的catalina.bat配置文件對以服務方式啓動的tomcat無效果Tomcat內存設置詳解性能
6.0以上的tomcat須要在tomcatw.exe文件中設置參數,好比個人tomcat9w.exe
用這個方法的前提是咱們的服務名稱必須是tomcat9,不然這個tomcat9w.exe運行會報錯,服務tomcat9未安裝
安裝tomcat服務的方法:在tomcat/bin目錄下,運行命令 service.bat install
Usage: service.bat install/remove [service_name] [/user username]
服務安裝完後,設置如上圖的配置,啓動服務後,內存修改完成。
看下監控的截圖(這張圖本來的jvm內存最大爲256MB時,內存使用率爲89%),修改內存爲512MB以後就好不少了
經過以上內存的配置,能夠總結windows下修改tomcat服務器jvm內存的兩種方法:一種,直接修改catalina.bat文件,修改完後能夠經過startup.bat方式啓動直接生效
另外一種就是做爲windows服務後臺運行方式啓動,這個須要修改tomcatw.exe的啓動參數(不知道是否是動態參數修改,猜想不是)