• JConsole远程监控配置


    首先,看本机(Windows)安装了JRE没

    Win 》 CMD 打开命令窗口

    如有安装,则会显示以下版本信息;若没有显示,就安装吧

    1 C:UsersAdministrator>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:UsersAdministrator>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

  • 相关阅读:
    以后有面试官问你「密码学」,你就把这篇文章扔给他
    66 个包过面试锦囊,拿走不谢!
    如何解决代码中 if…else 过多的问题
    为啥 SQL 加了索引会使数据查找更快?
    又一道可以投机取巧的算法题:完美数
    图解 LeetCode 第 3 号问题:数组中重复的数字
    如何用一行代码实现网页变灰效果?
    来了,来了!你们要的写给 Java 程序员看的算法学习指南!
    图解 LeetCode 第 16 号问题:最接近的三数之和
    用脚本帮同学自动生成文章观后感后,这名大四学生火了...
  • 原文地址:https://www.cnblogs.com/snooper/p/8580390.html
Copyright © 2020-2023  润新知