通过JDK自带的工具JVM可以远程连接目标服务器对其进行性能的监控,可以方便的查看到远程的JVM环境,内存,CPU使用率等。通过对参数的调优来调整JVM达到系统的最佳性能。
系统环境:
CentOS: 7.2.1511
JDK: 1.8.0_162
使用Jenkins来打包发布项目,为了方部署多实例,这里不对tomcat中bin/catalina.sh文件做修改,使用默认。而使用的JAVA_OPTS参数通过脚本传入。
Jenkins 上通过参数化构建时选择是否使用JVM远程监控功能,不选择时则走默认的配置。
JVM要启动远程监控主要的参数:我直接配置在JAVA_OPTS里
-Dcom.sun.management.jmxremote.port=${PORT} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/data/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/data/jmxremote.password -Djava.rmi.server.hostname=${IPADDS}
启动脚本如下,如果多实例情况下复制多个脚本使用不同的名字即可。
#!/bin/sh
# chkconfig: 2345 40 20
# AuthName:swper
# Website:https://www.58jb.com
# DateTime:2016-10-22
# description: 启动tomcat多实例.
#Location of JAVA_HOME (bin files)
export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:./:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 是否Debug
JVM=$2
PORT=$3
RETVAL=$?
# tomcat安装目录
export CATALINA_HOME="/data/tomcat7"
export IPADDS=`ip addr|grep "global"|awk '{print $2}'|cut -d '/' -f1`
# 可选
if [[ ${JVM} -eq 1 ]];then
export JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Denv=test -Xms1024m -Xmx1024m -XX:NewRatio=2 -XX:SurvivorRatio=8 -Dcom.sun.management.jmxremote.port=${PORT} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/data/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/data/jmxremote.password -Djava.rmi.server.hostname=${IPADDS}"
else
export JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Denv=test -Xms1024m -Xmx1024m -XX:NewRatio=2 -XX:SurvivorRatio=8"
fi
PID=`ps -ef|grep $CATALINA_HOME|grep -v grep|awk '{print $2}'`
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Start Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stop Tomcat"
$CATALINA_HOME/bin/shutdown.sh
kill -9 $PID >/dev/null 2>&1
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
脚本说明:
- JVM:此处对应Jenkins上的构建参数JVM.
- CATALINA_HOME:这里的目录就是一个Tomcat解压出来的目录,多个实例时复制多份,独立出来。
- PORT:对应Jenkins上的PORT参数;可以加上默认值,也可以手动修改。
- IPADDS:获取本机的IP地址,如果是云主机有些可能不是外网IP这里需要指定了。
- 这里使用了帐号密码认证Dcom.sun.management.jmxremote.access.file和Dcom.sun.management.jmxremote.password.file;
- jmxremote.access 文件中的内容如下:readwrite是一个参数必须的;
用户名 readwrite
- password.file文件中的内容如下:中间空格分开
用户名 密码
- 然后要对这两个文件授权
chown root.root /data/jmxremote.* chmod 600 /data/jmxremote.*
服务跑起来后就可以使用Windows里JDK的jvisualvm.exe或者jmc.exe连接了。
多实例说明:
如果单机多实例时建义就是一个tomcat就一个实例,我之前就是bin和lib目录共用的,这样不方便这样操作。单独分开后可以有利于配置不同的参数。