本篇合適對tomcat和JVM有一定了解的朋友。
常用的內置變量介紹:
CATALINA_BASE //用於設定可以具有寫權限或者自定義部分的文件存放位置,適用場景,需要在一節點上啓動多個tomcat實例,就可以定義多個CATALINA_BASE。
CATALINA_OPTS //定義JVM的運行屬性
JAVA_OPTS //定義多個JVM相同運行屬性。
JAVA_HOME //用於設定java或JDK運行時候的本地位置。
JRE_HOME //這是一個JAVA_HOME的別名。
瞭解配置文件:
/usr/local/tomcat/conf/catalina.policy 用於定義catalina安全策略
/usr/local/tomcat/conf/catalina.properties 用於定義catalina屬性信息
如何調整JVM堆內存。
我們先通過manager-gui看下當前堆內存大小.
當前最大內存239.75M我們來將它調整到512M。
定義屬性信息想要在啓動的時候生效,需要定義在/bin/catalina.sh 腳本中。
編輯$CATALINA_HOME/bin/catalina.sh,搜索JAVA_OPTS,找到提示段。
使用以下指令定義:
JAVA_OPTS="$JAVA_OPTS -Xmx512M"
如圖:
然後重啓tomcat服務。
查看狀態
指令介紹:
-Xms 128M 設定JVM運行的最小內存
-Xmx 256M 設定JVM運行的最大內存
-XX:MaxNewSize 定義新生代最大內存空間
-XX:MaxPermSize 定義持久帶最大內存空間
接下來看看狀態監控
jstat是一款JVM監控工具我們來看看他的用法:
jstat -<option> <vmid> 顯示頻率 [<count>]
jstat -class pid:顯示加載class的數量,及所佔空間等信息。
jstat -compiler pid:顯示VM實時編譯的數量等信息。
jstat -gc pid:可以顯示gc的信息,查看gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
jstat
-gccapacity:可以顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小,如:PGCMN顯示的是最小perm的內存使
用量,PGCMX顯示的是perm的內存最大使用量,PGC是當前新生成的perm內存佔用量,PC是但前perm內存佔用量。其他的可以根據這個類推,
OC是old內純的佔用量。
jstat -gcnew pid:new對象的信息。
jstat -gcnewcapacity pid:new對象的信息及其佔用量。
jstat -gcold pid:old對象的信息。
jstat -gcoldcapacity pid:old對象的信息及其佔用量。
jstat -gcpermcapacity pid: perm對象的信息及其佔用量。
jstat -util pid:統計gc信息統計。
jstat -printcompilation pid:當前VM執行的信息。
例:
jstat -gc 8825 1s 5
參數詳解:
S0:Heap上的 Survivor space 0 段空間大小KB
S1:Heap上的 Survivor space 1 段空間大小KB
S0U:Heap上的 Survivor space 0 段已使用空間大小KB
S1U:Heap上的 Survivor space 1 段已使用空間大小KB
EC:顯示現在Eden空間大小KB
EU:顯示現在Eden已用空間大小KB
OC:顯示現在old空間大小KB
OU:顯示現在old已用空間大小KB
PC:顯示現在持久帶空間大小KB
PU:顯示現在持久帶已用空間大小KB
YGC:從程序啓動到採樣時發生Young GC的次數
YGCT:Young GC所用的時間(單位秒)
FGC:從程序啓動到採樣時發生Full GC的次數
FGCT:Full GC所用的時間(單位秒)
GCT:用於垃圾回收的總時間(單位秒)
再介紹一個圖形化監控工具VisualVM + Visual GC
VisualVM下載地址:http://visualvm.java.net/download.html
如果機器在連通外網的情況下,可以添加VisualGC插件,顯示更豐富的信息。
monitor
Visual GC
參考資料:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/