JMX连接
一 JConsole 配置
1 将以下配置加入catalina.sh
2 JConsole 不需要访问用户和密码,下图中的用户名和口令,是连接远程服务器的账号和密码
if [ "$1" = "start" ];then
echo "set console";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=60001 ";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=60002";
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.50.128";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false";
else
echo "no startup";
fi;
3 此时启动Tomcat就可以访问,如果不行,那就是端口未开放,如下操作开放端口,我的机器是本地的虚拟机Centos7, 云服务器可能还需要去管理后台开放端口
firewall-cmd --zone=public --add-port=60001/tcp --permanent
firewall-cmd --zone=public --add-port=60002/ctp --permanent
firewall-cmd --reload
二 VisualVM 配置
1 不需要访问控制的配置同上,需要访问控制的配置如下
if [ "$1" = "start" ];then
echo "set console";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=60001 ";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=60002";
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.50.128";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password";
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access";
else
echo "no startup";
fi;
2 进入Tomcat conf目录
cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password
cp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access
3 修改 jmxremote.access
monitorRole readonly
controlRole readwrite
4 修改 jmxremote.password ,下面的格式为: 用户名 密码
monitorRole tomcat
controlRole tomcat
5 修改权限,如果不修改启动Tomcat的时候会有报错提示
chmod 600 jmxremote.access
chmod 600 jmxremote.password
Jstatd连接
1. cd $JAVA_HOME/bin 创建 jstatd.all.policy 加入以下内容
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
2 启动 jstatd, 以下各种方式都可以
nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.50.128 &
./jstatd -J-Djava.security.policy=jstatd.all.policy
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.50.128 -p 1099 -J-Djava.rmi.server.logCalls=true
启动服务之后就可以使用VisualVM 连接jstatd了, 这种是不考虑防火墙的使用方式
3 跨防火墙连接
使用增强的ejstatd
https://github.com/anthony-o/ejstatd
编译 mvn package
运行1:
mvn exec:java -Dexec.args="-pr2222 -ph2223 -pv2224"
or
运行2:
java -cp "target\ejstatd-1.0.0.jar;%JAVA_HOME%\lib\tools.jar" com.github.anthony_o.ejstatd.EJstatd -pr2222 -ph2223 -pv2224
on Windows, ifJAVA_HOME
is set as an environment variablejava -cp "target/ejstatd-1.0.0.jar:$JAVA_HOME/lib/tools.jar" com.github.anthony_o.ejstatd.EJstatd -pr2222 -ph2223 -pv2224
on Unix (using Bash), ifJAVA_HOME
is set as an environment variable