java jconsole 远程监控

jconsole 远程监控

一. windows 环境下的tomcat采用start.bat启动
二. windows 环境下的tomcat采用服务启动
三. linux 环境下tomcat采用catalina.sh启动
四. linux 环境下非tomcat的远程监控

不带密码验证的


一. windows 环境下的tomcat采用start.bat启动
--------------------
window 环境
采用start.bat启动
在doStart里添加
set CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false




二. windows 环境下的tomcat采用服务启动
--------------------
通过win服务启动
在java的opts里添加上面的4项内容, 注意行尾不能带空格





最后, 使用jconsole连接




------------------------------
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/home/tomcat/domains/server2/oom.hprof

参数说明
1. -XX:+HeapDumpOnOutOfMemoryError 表示当JVM发生OOM时,自动生成DUMP文件。
2. -XX:HeapDumpPath=存储文件/目录 表示生成DUMP文件的路径



三. linux 环境下tomcat采用catalina.sh启动
--------------------
思路:
1. catalina.sh里把jconsole设置写给JAVA_OPTS
注意:
1. cagtalina.sh stop 时带有jconsole设置的端口号会执行失败
2. tomcat需要指定在JAVA_OPTS里指定hostname=192.168.0.106

实现:
1. 在catalina.sh里找到start的执行区, 把jconsole参数赋给JAVA_OPTS

JAVA_OPTS="-Djava.rmi.server.hostname=192.168.0.106 -Dcom.sun.management.jmxremote -Dcom.sun.man    agement.jmxremote.port=9015 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management    .jmxremote.ssl=false"

如图











四. linux 环境下非tomcat的远程监控
--------------------
linux环境
1.检查linux的hostname, 使用
hostname -i
命令, 如果不是显示127.0.0.1, 则代表成功
否则, 使用hostname命令修改, 如
hostname 10.1.16.25

2.检查端口号是否开通
可以使用netstat命令查看端口是否正常启动, 如
netstat -an | grep 9015


3.启动java程序, 注意-D的三个参数
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9015 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -server -cp /local/MsgServer/lib/*:/local/MsgServer/bin dje.msgserver.app.App

*注1:由于-Dcom.sun.management.jmxremote.authenticate=false, 所以不需要输入用户名和密码

*注2:第1步是关键, 很多时候连不上linux都是这个原因

*注3:这上面的配置, 在没有防火墙的情况下是可以的, 但开了防火墙的话, 目前没有解决办法
原因分析:对于RMI来说, 需要2个端口, 1个是服务注册, 另1个是数据传输
很遗憾的是-Dcom.sun.management.jmxremote.port=9015指定的端口号是服务注册
另1个数据传输的端口号是随机的, 所以防火墙没办法提前预配置
要找出那个神秘的RMI数据传输端口, 可以通过:
1.抓包工具 (看图)
2.pid 和 netstat (看图)


通过抓包工具找端口



通过pid和netstat找端口















猜你喜欢

转载自mocha-c-163-com.iteye.com/blog/2222938