封尘网

让学习成为一种习惯!

Centos下开启JVM远程性能监控

通过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目录共用的,这样不方便这样操作。单独分开后可以有利于配置不同的参数。

提醒:本文最后更新于 148 天前,文中所描述的信息可能已发生改变,请谨慎使用。