一,前言
在文章讓tomcat使用指定JDK中,我讓tomcat成功使用了我指定的JDK1.8,而不是環境變量中配置的JDK10。本篇文章我們就來探討一下怎么設置tomcat使用的JVM的內存。
為什么要設置tomcat是用的JVM的內存呢?
大家在平時的工作或者學習中,很有可能會遇到內存溢出的異常例如:OutOfMemoryError,StackOverflowError,這個時候除去代碼編寫錯誤外,很可能是真的要增大JVM內存了。
如何查看JVM內存使用情況呢?這里介紹一個JDK自帶的JVM內存監控工具:jvisualvm
二,jvisualvm簡單使用
jvisualvm.exe就在JDK的bin目錄中
雙擊即可啟動。在啟動jvisualvm之前,我先啟動在文章讓tomcat使用指定JDK中配置了JDK1.8的tomcat。
然后雙擊啟動jvisualvm,如果你是第一次啟動jvisualvm,需要做一些檢查,不用配置任何東西,按指導點擊即可。
從上圖中可以看到,本地中存在三個JVM進程,也就是說我現在的電腦中有三個JVM進程。
第1個是jvisualvm自己的JVM進程。
第2個是我現在電腦上啟動的eclipse使用的JVM進程。
第3個就是我在啟動jvisualvm之前啟動的tomcat使用的JVM進程了。
雙擊第3個tomcat使用的JVM進程,就會進入JVM概述頁面
在概述頁面中,我解釋一下上圖中標識的兩個區域
第1個區域展示了java和JVM的一些信息,例如,JVM使用的是hotspot虛擬機(版本信息)並且是以server模式啟動的
第2個區域是JVM參數區域,這里是接下來的一個重點關注區域了,因為JVM內存的設置會在這里直接顯示出來
接下來觀察一下監視頁面
在這個頁面中我也解釋兩個部分
第1個部分是堆內存區域:這里主要是展示了堆內存的使用情況,從上圖中可以看出在我的電腦上JVM默認的堆內存大小為200M,當然當內存使用達到200M的時候,JVM會想系統再申請額外的內存。我們一會兒就會更改這個內存的大小。
第2個部分是Mataspace(元數據)內存區域:mataspace內存是hotspot虛擬機對虛擬機規范中的方法區的實現,這里主要存放的是類的元數據信息。在JDK1.8以前方法區的實現是永生代(permanent generation)
為了能讓我們接下來的JVM內存設置看到直接的效果,jvisualvm工具的使用就先介紹到這里,接下來就來修改JVM內存大小。
三,設置tomcat使用的JVM的內存
其實也是超級簡單,只需要在tomcat的bin目錄下catalina.bat文件前面添加一行配置:set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
如下圖
上圖中也對Xms,Xmx等參數進行了解釋說明。
這里再多說一句,為什么要講-Xms和-Xmx設置為一樣呢?因為虛擬機在向系統申請內存的時候是需要額外的消耗的,這里為了避免這些額外的消耗,將-Xms和-Xmx設置為一樣。
-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m也是同樣的道理。
接下來重啟tomcat,在jvisualvm中重新雙擊tomcat虛擬機進程,觀察概述的JVM參數部分:
可以看到,我們在catalina.bat中設置的參數都在這里體現了。那么到底有沒有效果呢?
我們來看一下監視頁面中的堆內存部分
可以看到-Xms和-Xmx設置的2048M的內存,確實是生效了。
但是我發現mataspace的設置並沒有生效,希望看到的小伙伴中能有人給我解答,謝謝。
到這里,修改tomcat使用的JVM的內存,就結束了,希望對你有幫助。
原創不易,轉載請聲明出處:https://www.cnblogs.com/zhangchengzi/p/9759890.html