visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决

visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决

  • JMX方式:

    1. 编辑Tomact里bin目录的catalina.sh . 在其头部加入

      JAVA_OPTS="
      -Dcom.sun.management.jmxremote
      -Dcom.sun.management.jmxremote.port=8998 这个端口可以改
      -Dcom.sun.management.jmxremote.rmi.port=8998
      -Dcom.sun.management.jmxremote.ssl=false
      -Dcom.sun.management.jmxremote.authenticate=ture 需要鉴权 若为false则不需要下两行的配置
      -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
      -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
      -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx" 服务器ip地址

    2. 编辑Tomcat里conf目录的server.xml 加入监听器:

         <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="8998" rmiServerPortPlatform="8999" />
      
      • 其中8998可以改为你想要的端口
    3. 在conf目录新建两个文件

    • jmxremote.access文件内容:

      username  readwrite
      

      第一个参数是用户名,第二个是这个用户拥有读取/写入权限

    • jmxremote.passwd文件内容:

      username password
      

      第一个参数为access的文件里的用户名,password为要设置的密码

    1. 去iptables开启刚刚设置的端口,这里为8998
    • vim /etc/sysconfig/iptables
      -A INPUT -p tcp -m state --state NEW -m tcp --dport 8998 -j ACCEPT
    
    1. 这个时候理论上可以开启visualVM然后添加远程主机监控了,但是由于JMX还需要监听一到两个随机端口。
    • 会报错:

      无法使用service:jmx:rmi连接
      
    • 解决方法有两种

      1. 是用 jps 得到pid,然后使用 lsof -i|grep {pid} 命令得到监听的其他端口
        然后将在iptables开放。

      2. 关闭iptabels防火墙,service iptables stop。

    • 之后就可以在本地机上开visualVm添加远程主机,不使用ssl连接。开启监控啦

    1. jmx方式只能针对一个jvm,并且不支持visualGC。下面介绍第二种。
  • jstatd方式

    1. 使用cd $JAVA_HOME 到jdk的根目录,bin文件夹里面新建jstatd.all.policy文件。

      • 内容如下:

        grant codebase "file:${java.home}/../lib/tools.jar" {
        permission java.security.AllPermission;
        };
        
    2. 在bin目录下启动Jstatd。

      • ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.0.23

        hostname为外网ip。

    3. 这个使用本地主机上使用jps xxx.xxx.xxx.xxx的方式访问远程报错:java.rmi.ConnectException: Connection refused to host: xxx.xxx.xxx.xxx;

      • 原因 : jstatd会随机监听1,2个端口。
      • 解决方法: 同上(用lsof命令查看监听的端口)。
    4. 这个时候visualVM会自动刷新进程,一般两三秒就可以看到远程服务器上的所有jvm进程。
      本文地址:http://www.cnblogs.com/zhengshiqiang47/p/7634522.html

posted @ 2017-10-07 12:47  CoderQiang  阅读(799)  评论(0编辑  收藏  举报