本篇合适对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/