JConsole远程监控配置
首先,看本机(Windows)安装了JRE没
Win 》 CMD 打开命令窗口
如有安装,则会显示以下版本信息;若没有显示,就安装吧
1 C:\Users\Administrator>java -version 2 java version "1.8.0_111" 3 Java(TM) SE Runtime Environment (build 1.8.0_111-b14) 4 Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
1)在Windows命令窗口直接命令打开JConsole
1 C:\Users\Administrator>jconsole
2)抱着碰运气的心理尝试连接一下,结果,连接失败
看来没法偷懒,还是得配置才行,那就来吧
需要的信息:
- Linux 服务器的root账号及密码
- 项目Tomcat路径,一般是:/usr/local/tomcat/tomcat_jdt
1、先来看一下项目的相关信息
1 [root@test1 bin]# cd /usr/local/tomcat/tomcat_jdt/bin 2 [root@test1 bin]# ./version.sh 3 Using CATALINA_BASE: /usr/local/tomcat/tomcat_jdt 4 Using CATALINA_HOME: /usr/local/tomcat/tomcat_jdt 5 Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat_jdt/temp 6 Using JRE_HOME: /usr/local/jdk1.7.0_79 7 Using CLASSPATH: /usr/local/tomcat/tomcat_jdt/bin/bootstrap.jar:/usr/local/tomcat/tomcat_jdt/bin/tomcat-juli.jar 8 Server version: Apache Tomcat/7.0.68 9 Server built: Feb 8 2016 20:25:54 UTC 10 Server number: 7.0.68.0 11 OS Name: Linux 12 OS Version: 2.6.32-431.el6.x86_64 13 Architecture: amd64 14 JVM Version: 1.7.0_79-b15 15 JVM Vendor: Oracle Corporation
2、通过配置Tomcat项目来开启远程监控
3、打开Tomcat项目bin目录
1 [root@test1 ~]# cd /usr/local/tomcat/tomcat_jdt/bin/ 2 [root@test1 bin]# pwd 3 /usr/local/tomcat/tomcat_jdt/bin
4、编辑 catalina.sh 文件
1 [root@test1 bin]# vi catalina.sh
5、找到这么一句:# ----- Execute The Requested Command -----------------------------------------
并在其上方加入以下配置(配置的描述说明自己度娘)
1 JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=17.19.0.23 -Dcom.sun.management.jmxremote.port=9070 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
17.19.0.23 是服务器的IP
9070是新的端口,jconsole专用
6、完成后大致如下
1 … 2 3 # org.apache.catalina.security.SecurityListener 4 5 #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" 6 7 JAVA_OPTS="$JAVA_OPTS -Ddt.base=/usr/local/tomcat/config_dt -Xmx1500m -Xms512m -XX:PermSize=1024M -XX:MaxPermSize=1600m" 8 9 JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=17.19.0.23 -Dcom.sun.management.jmxremote.port=9070 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 10 11 12 13 # ----- Execute The Requested Command ----------------------------------------- 14 15 …
7、OK,配置就完成了;
8、一般情况下,项目配置修改后都是需要重启才生效的;
9、关闭项目Tomcat,结果报错
1 [root@test1 bin]# ./shutdown.sh 2 Using CATALINA_BASE: /usr/local/tomcat/tomcat_jdt 3 Using CATALINA_HOME: /usr/local/tomcat/tomcat_jdt 4 Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat_jdt/temp 5 Using JRE_HOME: /usr/local/jdk1.7.0_79 6 Using CLASSPATH: /usr/local/tomcat/tomcat_jdt/bin/bootstrap.jar:/usr/local/tomcat/tomcat_jdt/bin/tomcat-juli.jar 7 Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9070; nested exception is: java.net.BindException: Address already in use
10、解决方法,直接杀掉Tomcat项目进程:kill -9 pid
11、再次执行 shutdown.sh 脚本,成功;
1 [root@test1 bin]# ./shutdown.sh
12、执行 startup.sh 启动脚本,项目启动成功;
1 [root@test1 bin]# ./startup.sh
13、Windows下JConsole再连接,又失败
14、看catalina日志,又没报错。。。没方向了?
15、查一下9070端口,没启动!
1 [root@test1 bin]# netstat -an | grep 9070 2 3 [root@test1 bin]#
16、查看一下防火墙有没有开
1 [root@test1 bin]# service iptables status
17、如有防火墙开着的,就将 9070 端口给开放了
1 [root@test1 bin]# vi /etc/sysconfig/iptables
18、修改 iptables 文件时需要注意的是 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9070 -j ACCEPT 要放到端口 22 的下方
完成后大概是这样的
1 ... 2 -A INPUT -p icmp -j ACCEPT 3 -A INPUT -i lo -j ACCEPT 4 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 5 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 6 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9070 -j ACCEPT 7 -A INPUT -j REJECT --reject-with icmp-host-prohibited 8 -A FORWARD -j REJECT --reject-with icmp-host-prohibited 9 COMMIT 10 ...
- 当然了,不管防火墙状态,更直接的方法是关了防火墙。。。
1 [root@test1 bin]# service iptables stop 2 iptables: Setting chains to policy ACCEPT: filter [ OK ] 3 iptables: Flushing firewall rules: [ OK ] 4 iptables: Unloading modules: [ OK ] 5 [root@test1 bin]# service iptables status 6 iptables: Firewall is not running.
19、再查一下hostname 及其IP地址,结果是:hostname: Unknown host
1 [root@test1 bin]# hostname 2 test1 3 [root@test1 bin]# hostname -i 4 hostname: Unknown host 5 [root@test1 bin]#
解决方法:将 hosts 中的 127.0.0.1 修改为服务器在局域网中的 IP,并将其指向 hostname(主机名)
1 [root@test1 bin]# vi /etc/hosts 2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 3 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 4 …
修改后,长这样
1 17.19.0.23 localhost localhost.localdomain localhost4 localhost4.localdomain4 test1 2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6… 3 …
20、再次重启Tomcat项目,再查一下9070端口,已经在监听:
1 [root@test1 bin]# netstat -an | grep 9070 2 tcp 0 0 :::9070 :::* LISTEN
21、Windows下,JConsole再连接,成功
外篇:需要密码验证的配置
注:以下只列出关键步骤,未验证过
1、开启验证模式,并指定用户账号密码文件
1 JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=172.19.0.203 -Dcom.sun.management.jmxremote.port=9070 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/usr/local/jdk1.7.0_79/jre/lib/management/jmxremote.password"
也有一说法,这个 jmxremote.access 权限设置文件也很重要,直接在 JAVA_OPTS 后面加上即可
1 -Dcom.sun.management.jmxremote.access.file=/usr/local/jdk1.7.0_79/jre/lib//management/jmxremote.access
2、找到配置修改账号密码的目录
1 [root@test1 bin]# cd /usr/local/jdk1.7.0_79/jre/lib/management 2 [root@test1 management]# ll 3 total 28 4 -rw-r--r--. 1 uucp 143 3998 Apr 11 2015 jmxremote.access 5 -r--r--r--. 1 uucp 143 2856 Apr 11 2015 jmxremote.password.template 6 -rw-r--r--. 1 uucp 143 14097 Apr 11 2015 management.properties 7 -r--r--r--. 1 uucp 143 3376 Apr 11 2015 snmp.acl.template
3、复制 jmxremote.password.template ,并新命名为 jmxremote.password
1 [root@test1 management]# cp jmxremote.password.template jmxremote.password 2 [root@test1 management]# ll 3 total 32 4 -rw-r--r--. 1 uucp 143 3998 Apr 11 2015 jmxremote.access 5 -r--r--r-- 1 root root 2856 Mar 13 15:27 jmxremote.password 6 -r--r--r--. 1 uucp 143 2856 Apr 11 2015 jmxremote.password.template 7 -rw-r--r--. 1 uucp 143 14097 Apr 11 2015 management.properties 8 -r--r--r--. 1 uucp 143 3376 Apr 11 2015 snmp.acl.template
4、给两个文件 jmxremote.access jmxremote.password 加上 600 权限
1 [root@test1 management]# chmod 600 jmxremote.access jmxremote.password
5、将 jmxremote.password 两行的注释去掉
1 [root@test1 management]# vi jmxremote.password 2 ... 3 # monitorRole QED 4 # controlRole R&D 5 ...
6、注释去掉后长这样:
1 ... 2 monitorRole QED 3 controlRole R&D 4 ...
7、配置完成,重启Tomcat 项目,在 JConsole 上连接时加上账号(monitorRole )密码(QED)
The End