zoukankan      html  css  js  c++  java
  • 使用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界面
    (完)
  • 相关阅读:
    mysql添加索引
    【最短路】道路重建 @upcexam5797
    【数论&想法题】小C的问题 @"科林明伦杯"哈尔滨理工大学第八届程序设计竞赛
    【最大公约数&链表】权值 @upcexam5921
    【组合数】微信群 @upcexam6016
    【二维树状数组】计数问题 @JSOI2009/upcexam5911
    【组合&取补集】数三角形 @CQOI2014/BZOJ3505/upcexam3843
    【LCA&倍增】货物运输 @upcexam5909
    【组合数】[NOIP2011]选择客栈[c++]
    【模拟】[NOIP2011]铺地毯[c++]
  • 原文地址:https://www.cnblogs.com/zjITgrow/p/8193525.html
Copyright © 2011-2022 走看看