前一段测试系统崩溃过一回,所以想远程监控一下jvm的运行情况,我在网上也找了不少文章和办法,试了好几次都没成功,今天算试成功了,但是不太完美,因为需要将Linux的防火墙关掉才可以连接,我尝试将连接的端口号加到iptables中,重启防火墙,也不行。所以先记录下来,以后再看看是什么问题。
1.linux下tomcat安装目录下的bin文件夹中的catalina.sh
端口号:1099,Linux主机IP:192.168.193.129
检查host是否是127.0.0.1 , 执行命令 hostname -i 如果是127.0.0.1 。
在etc/hosts 文件中将127.0.0.1改为主机IP(此处为192.168.193.129),如果不能保存,改权限
chmod +x hosts
在catalina.sh文件中添加如下:
CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.193.129"
要用CATALINA_OPTS,不要用JAVA_OPTS。下面截图配置的是JAVA_OPTS,这样会存在一个问题,因为JAVA_OPTS在tomcat启动和关闭时都会执行,所以在关闭tomcat的时候也会试图启动jmx,报端口被占用异常。
Using CATALINA_BASE: /zyj/apache-tomcat-7.0.65
Using CATALINA_HOME: /zyj/apache-tomcat-7.0.65
Using CATALINA_TMPDIR: /zyj/apache-tomcat-7.0.65/temp
Using JRE_HOME: /zyj/jdk1.7.0_79
Using CLASSPATH: /zyj/apache-tomcat-7.0.65/bin/bootstrap.jar:/zyj/apache-tomcat-7.0.65/bin/tomcat-juli.jar
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use
因为CATALINA_OPTS只在tomcat启动时执行,所以就没这个问题。
位置:
这是不加认证的。以上配置是需要关闭防火墙,如果想不关闭防火墙来访问。需要在iptables里把1099端口给公布出去。
关闭防火墙命令:service iptables stop
- [root@localhost sysconfig]# service iptables stop
- Flushing firewall rules: [ OK ]
- Setting chains to policy ACCEPT: filter [ OK ]
- Unloading iptables modules: [ OK ]
在etc/sysconfig/iptables中加入:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1099-j ACCEPT
或者
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1099-j ACCEPT
重启防火墙命令:service iptables restart
补充:
1) Linux操作系统中永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
需要说明的是对于Linux操作系统中的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
----------------------------------------------------------------------------------------------
以下连接成功是Linux下关闭了防火墙:
1.打开java安装目录bin目录下的jvisualvm.exe
C:\Program Files\Java\jdk1.7.0_45\bin
2.在远程上右键,添加远程主机
3.在添加的远程主机上右键,添加Jmx
此处不需要密码,点击确定即可。
4.双击连接查看Jvm运行情况
如果服务器是resin,则进行如下配置:
以下配置在Windows和Linux下同时适用,打开conf/resin.conf 中的JMX配置信息如下:(resin4.0以上resin.conf被resin.xml替换)
- 无限制访问
<jvm-arg>-Dcom.sun.management.jmxremote.port=9009</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
- 需要用户名和密码访问
<jvm-arg>-Dcom.sun.management.jmxremote.port=9009</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password</jvm-arg>