• VisualVM监控远程服务器JVM


    VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很有帮助。在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可,一个主要运行界面如图:

     

    VisualVM会自动检测本机运行中的JVM并建立连接,本文主要介绍连接远程Linux服务器的配置方法,测试环境为CentOS 6.5,JDK8,Tomcat8。

    VisualVM连接远程服务器有两种方式:JMX和jstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持CPU监控,实际使用可同时配置上并按需选用。

    1 配置前的准备
    我们需要先检查linux的hostname匹配的IP,执行

    hostname -i

    如果匹配的结果是无法识别或者127.0.0.1, 则需要手动配置主机名和IP映射。假设要用于建立连接的IP是192.168.11.233,主机名是mylinux:

    vi /etc/hosts

    添加一行

    192.168.11.233  mylinux

    2 配置JMX
    2.1 创建setenv.sh
    进入tomcat/bin目录

    vi setenv.sh

    #!/bin/shexport JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"

    (-Xms512m -Xmx512m不是必须的参数,放在这里只是示意可以连同JVM参数一起调整)
    设置权限

    chmod +x setenv.sh

    2.2 在server.xml中添加listener
    进入tomcat/conf目录

    vi server.xml

    <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

    端口可根据实际情况修改,添加后的结构如下图

     

    2.3 JMX访问控制文件
    进入tomcat/conf目录,执行

    cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.passwordcp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access
    然后

    vi jmxremote.password
    取消以下两行注释
    #monitorRole QED
    #controlRole R&D

    也可以自定义账号,按username password的格式添加一行,这样就需要同时修改jmxremote.access

    vi jxmremote.access
    在最下面添加
    username  readwrite

    修改权限

    chmod 600 jmxremote.password
    chmod 600 jxmremote.access

    2.4 添加catalina-jmx-remote.jar
    下载地址  http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote

    下载后复制到 tomcat/lib目录

    至此,配置工作完成,但是还需要把2.2中的两个端口加入到防火墙允许规则中

    2.5 设置防火墙
    vi /etc/sysconfig/iptables

    在-A INPUT -j REJECT --reject-with icmp-host-prohibited前加入 

     -A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT 
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT


    service iptables restart
    在客户机上telnet 服务器的10001和10002端口,如果都通就正确了。

    2.6 测试
    在客户机上启动jvisualvm.exe,在左侧树形菜单的远程上右键 -> 添加远程主机,主机名填写服务器IP

     

    确定后,远程下出现新的子节点,在子节点上右键 -> 添加JMX连接

    连接输入IP:10001,注意这个端口是2.2步骤中配置的rmiRegistryPort。勾选使用安全凭证,用户名和口令即2.3步骤中jmxremote.password文件内的用户名和对应密码。勾选保存安全凭证

     

    本文的配置中未启用SSL,点确定后会提示“请确认不用SSL方式尝试连接”,选择“是”。如果一切顺利在服务器节点下出现JMX连接子节点,双击后即可打开功能界面。

     

    尝试一下强大的Visual GC插件,很遗憾,提示"不受此JVM支持“,如果想使用这个插件,就需要配置jstatd连接方式,下面来看jstatd的配置。

    3 配置jstatd
    3.1 配置安全策略
    vi $JAVA_HOME/jre/lib/security/java.policy
    在文件末位的 }; 前添加
    permission java.security.AllPermission;

    3.2 启动jstatd
    cd $JAVA_HOME/bin
    ./jstatd -J-Djava.security.policy=all.policy &
    启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,如./jstatd -J-Djava.security.policy=all.policy -p 10003 &
    3.3设置防火墙
    除了把1099添加到防火墙规则外,还需要找到另外一个随机端口,也加入到规则中
    执行
    netstat -anp | grep *jstatd

    可以看到除了1099,jstatd还监听了53040端口,把这个也加入到规则中,添加方法参照2.5
    (注意:这个随机端口重启后会变化)
    3.4 测试
    启动VisualVM,因为在配置JMX时已经添加过服务器节点,如果配置正确,通常VisualVM会自动检测到jstatd连接并添加节点

    如果没有自动添加,可以检查端口是否能连通并尝试手动添加连接
    VisualGC界面

     

  • 相关阅读:
    使用std::accumulate计算和、积和平均值
    Boost文件读写,断言、日期
    mem_fun的用法,以及使用wcout
    singleton的内存泄漏及线程安全性问题
    delphi关键字
    Windows Api的一些方法 封装 以及 常用参数
    linux字符设备驱动 自动创建设备节点的的方法
    Linux混杂设备注册方法
    linux2.6字符设备的标准注册方法
    另一种linux下的powerpc中断注册的方法
  • 原文地址:https://www.cnblogs.com/AryaZ/p/10492326.html
Copyright © 2020-2023  润新知