Jconsole远程监控Linux下Tomcat
1 卸载openjdk安装sun jdk
1.1 卸载openjdk
在openjdk中没有找到Jconsole工具,所以需要卸载openjdk。步骤如下:
1) 查看系統的jdk: rpm -qa | grep jdk(我这里找到的是:java-1.6.0-openjdk-1.6.0.0-1.43.1.10.6.el6_2.i686),如果找不到可以用rpm -qa | grep gcj
2) 移出系统自带的jdk: yum -y removejava-1.6.0-openjdk-1.6.0.0-1.43.1.10.6.el6_2.i686
1.2 安装sunjdk
不会安装及配置的同学可以网上查找资料,这里不列出来了。
2远程监控配置
2.1 JDK配置
在%JAVA_HOME%/jre/lib/management目录下,jmxremote.password.template、jmxremote.password需要修改配置。具体步骤如下:
1) 复制一份jmxremote.password.template文件,将其重命名为jmxremote.password,这就是控制远程连接的用户名密码的。
2) 然后编辑jmxremote.password文件,修改下面两行,把注释#去掉:
#monitorRole QED
#controlRole R&D
monitorRole是查看角色(也是登录用户名,在access文件中),拥有只读权限,QED是设置的密码。
controlRole是控制用户(也是登录用户名,在access文件中),拥有读写权限,R&D是设置的密码。
3) 最后chmod对这两个文件赋权,600就可以了。
chmod 600 jmxremote.password.template
chmod 600 jmxremote.password
2.2 Tomcat启动配置
编辑tomcat/bin/catalina.sh,在Execute The RequestedCommand这段注释上面加入下面这段代码,中间无换行:
#注意hostname是tomcat所在服务器IP,port是监控端口。
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=172.7.9.201 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=22222 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
然后如果开启了防火墙,要将端口加入防火墙信任列表:
在/etc/sysconfig/iptables中加入如下一行
-ARH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT
也可以用iptables命令直接加上。
之后启动tomcat,刚才设置的22222端口就处于侦听状态了。
2.3 监听端配置
另外找一台服务器(安装sun jdk),命令行进入%JAVA_HOME%/bin ,运行jconsole(图1),勾选远程进程,输入远程地址为172.7.9.201:22222,用户名controlRole,密码QED。
图1
点击“连接”,成功后,就可以监控啦(图2)。
图2
3 问题解决
3.1 问题描述:
在安装问sun jdk,以及配置JDK、Tomcat之后,启动Tomcat,发现报如下错误:
java.net.UnknownHostException: yydcj-centos: yydcj-centos
at java.net.InetAddress.getLocalHost(InetAddress.java:1426)
at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:490)
at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:288)
at org.apache.jk.server.JkMain.pause(JkMain.java:726)
at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
at org.apache.catalina.connector.Connector.pause(Connector.java:1064)
at org.apache.catalina.core.StandardService.stop(StandardService.java:578)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
3.2 问题原因:
分析日志,刚开始以为是卸载open jdk后安装sun jdk或者是Tomcat配置了远程监控项导致的问题,后来查看发现在没有进行如上所有操作(卸载openjdk安装sunjdk,配置tomcat启动项)的时候,也有该问题。排除这些可能后,再认真看上面的报错,yydcj-centos是未知的主机异常。
3.3 解决办法:
修改/etc/hosts文件,在127.0.0.1这一行的最后空一格,加上yydcj-centos,重启Tomcat就不会再报错了。