使用 JMX 连接远程服务进行监测
- 1.JVM参数
- 2.启动脚本
- 3.演示
使用相关JMX工具连接部署在服务器上的Java应用,可以对应用的内存使用量,CPU占用率和线程等信息进行监测。
相关监测工具有jconsole,jprofiler,jvisualvm等。
1.JVM参数
监测的前提是在应用启动时候指定好了相关JVM参数。
下面列举了必须的JVM 参数:
-Djava.rmi.server.hostname=[远程机器 IP]
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
2.启动脚本
nohup java -Xmx256m -Xms256m -Djava.rmi.server.hostname=x.x.x.x -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo.jar >logs/log_$(date +"%Y-%m-%d").out 2>&1 &
上述脚本中需要替换Djava.rmi.server.hostname
的值为自己服务器的ip,如87.34.178.79
。
如果启动时出现找不到 jmxremote.password 密码文件的报错,可以到 {JAVA_HOME}/jre/lib/management/
下复制一份 jmxremote.password.template
并改名为 jmxremote.password
下面是具体的指令:
cd /usr/local/java/jdk1.8.0_321/jre/lib/management
cp jmxremote.password.template jmxremote.password
注意:这里的/usr/local/java/jdk1.8.0_321
是JAVA的安装路径,不同机器根据实际情况,所在路径不同
这里我是已经完成了拷贝的操作
打开 jmxremote.password
文件并取消最后两行的注释:
monitorRole QED
controlRole R&D
如果 -Dcom.sun.management.jmxremote.authenticate
设置为 true,则在远程登录进行监测的时候需要使用这里的密码进行连接。例如:用户名是monitorRole
,密码是QED
。
3.演示
这里使用jconsole进行演示。
打开cmd,输入jconsole,进入到登录界面。
点击远程进程,然后输入ip:port
,下面的用户名和口令如果在JVM参数里将需要密码登录连接设置成true的情况下,需要输入jmxremote.password中保存的用户名和口令,我这里是设置的不需要密码连接,所以直接点击连接按钮,即可连接成功。