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界面

(完)

使用VisualVM监控远程服务器JVM的更多相关文章

  1. VisualVM监控远程服务器JVM

    VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...

  2. 【Java】监控远程服务器JVM

    今天在用JMeter进行测试的时候,发现线程并发量到50的时候会导致阻塞情况,于是需要监控远程JVM,那么如何监控远程JVM呢? 首先,找到启动计量引擎的sh文件,例如我目前的计量引擎启停文件为str ...

  3. visualvm 监控 远程 机器上的 Java 程序

    JDK里面本身就带了很多的监控工具,如JConsole等. 我们今天要讲的这款工具visualvm,就是其中的一款.但是这款工具是在JDK1.6.07及以上才有的.它能够对JAVA程序的JVM堆.线程 ...

  4. 转:visualvm监控远程机器上的Java程序

    转自:http://hanwangkun.iteye.com/blog/1195526 JDK里面本身就带了很多的监控工具,如JConsole等.我们今天要讲的这款工具visualvm,就是其中的一款 ...

  5. 关于nagios监控远程服务器对服务器性能影响的测试

    1.    Nagios监视远程服务器时,是通过在控制端执行以下命令进行数据收集的: /usr/local/nagios/libexec/check_http -I 192.168.16.11 /us ...

  6. 通过SSIS监控远程服务器Windows服务并发送邮件报警!

    利用SSIS不仅可以做BI项目的ETL,而且还可以做一些系统监控和维护工作,由于之前供应商写的Windows服务是读取ESB的消息进行处理,且通过OA流程与访客系统进行了集成,无论是ESB出现状况,还 ...

  7. 通过SSIS监控远程服务器磁盘空间并发送邮件报警!

    由于之前ESB是供应商部署的,且部署在C盘(C盘空间很小,还添加了很多ESB的windows服务日志在C盘,很容易把C盘空间占满,导致ESB服务运行宕机,几乎每隔几周发生一次事故,需要人工干预处理,不 ...

  8. 使用Java VisualVM监控远程JVM

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...

  9. Java VisualVM监控远程JVM

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...

随机推荐

  1. sql 查询效率

    1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量.调整不良SQL通常可以从以下几点切入: 检查不良的SQL,考虑其写法是否还有可优化内容 检查子查 ...

  2. python 杨辉三角

    前提:端点的数为1. 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 第n行的数字有n项. 第n行数字和为2n-1. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同 ...

  3. Android服务之Service(其一)

    android中服务是运行在后台的东西,级别与activity差不多.既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服务Service来播放音乐,或者记录你 ...

  4. php开发api接口

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  5. C# : Post 接收或发送XML

    项目分成两个 web(ASP.Net)用户处理请求,客户端(wpf/winform)发送请求 1.web项目 有两个页面 SendPost.aspx(单纯发送数据给客户端) 代码: public pa ...

  6. 创建MySQL 用户

    create user 'lixianming'@'localhost' identified by 'lxm123456'; grant all on art.* to 'lixianming'@' ...

  7. [系统设计/开发] APP密钥签发服务器

    公司的信息安全制度要求对产线的APP进行严格的签发管理,确保密钥.密码的安全. 之前的做法是: 建立一台独立的签发主机: 密钥放在签发主机上,由专人管理: 构建系统每构建出一个产线APP,都要手动拷贝 ...

  8. 数据库&数据仓库

    数据仓库的定义: 世界公认的数据仓库概念创始人W.H.Inmon在<数据仓库>(Building the Data Warehouse)一书中对数据仓库的定义是:数据仓库就是面向主题的.集 ...

  9. ThinkPad E440 加内存后导致开不了机

    上周五新买的ThinkPad E440,原装内存是4G DDR3 1600Hz,明显不够用,于是在京东上买了一根南亚易胜的4G DDR3 1600Hz.安装之后正常开机,明显感觉速度快了很多.可是用了 ...

  10. Java事务处理全解析(五)—— Template模式

    在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理. Te ...