本篇合适对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看下当前堆内存大小.

wKioL1PtvGyRrIhKAAIvsmApZZU283.jpg


当前最大内存239.75M我们来将它调整到512M。


定义属性信息想要在启动的时候生效,需要定义在/bin/catalina.sh 脚本中。

编辑$CATALINA_HOME/bin/catalina.sh,搜索JAVA_OPTS,找到提示段。

使用以下指令定义:

 JAVA_OPTS="$JAVA_OPTS -Xmx512M"

如图:

wKiom1Ptv06hBOXwAAGjdeBuFY8631.jpg

然后重启tomcat服务。

查看状态

wKiom1PtwI_SUdddAAGXWq3lUTI566.jpg


指令介绍:
    -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

wKioL1PtwzySFOIfAAIO-JIpgJU797.jpg

参数详解:

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

wKioL1Pt2I6CisfXAAN2XKaAcK8645.jpg

Visual GC

wKioL1Pt2O_Tu7p0AAPkhPnz8RM595.jpg


参考资料:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/