通过VisualVM和VisualGC来监控Tomcat的运行情况

在对应用程序做性能测试之前需要配置对tomcat的监控,下面的步骤详细介绍了如何通过visualVM和VisualGC来监控tomcat的运行情况。

关于VisualVM的介绍,请分别前往http://visualvm.java.net/查看,VisualGC是VisualVM的一个插件,用来可视化查看JVM内存实时回收情况。具体信息请前往http://www.oracle.com/technetwork/java/visualgc-136680.html查看官方介绍。

本次实验是在本地(Windows 7)上开启VisualVM,远程监控测试服务器(192.168.1.11)上面的tomcat的运行情况,tomcat版本是7.0.42, JDK的版本是1.7.0_45.

服务端准备工作:

  1. 开启tomcat的JMX支持。在tomcat的启动参数里面增加:
    CATALINA_OPTS=”-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9901 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.11″
    如果在${TOMCAT_HOME}下面有setenv.sh, 那么将上面的参数添加到JAVA_OPTS,然后export JAVA_OPTS也可以。
    9901是客户端的接入端口(JMX/RMI port for Platform MBeans),初次之外JMX会在背后启动一个随机的JMX/RMI sever端口,这样一来如果服务器启用了防火墙,那么这个随机端口就不好配置策略了。好在tomcat提供了第二种配置方案,那就是在启动参数中去掉端口配置,然后通过在server.xml通过Listener的方式来配置固定的端口。在“server”节点添加如下配置:
    <Listener className=”org.apache.catalina.mbeans.JmxRemoteLifecycleListener” rmiRegistryPortPlatform=”9901″ rmiServerPortPlatform=”9902″ />
    这里的rmiRegistryPortPlatform=”9901″就是对应了之前的-Dcom.sun.management.jmxremote.port=9901,9902就是那个随机端口,现在固定下来了,防火墙上面可以很方便的配置通过策略。关于这个Listener的说明请参考这里。本次实验就是采取这种方式。
  2. 根据tomcat具体的版本号去http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.42/bin/extras/下载catalina-jmx-remote.jar,并把它放到$TOMCAT_HOME/lib下面,然后重启tomcat。
  3. 启动jstat deamon程序。Java Virtual Machine Statistics Monitoring Tool(jstat)是为VisualGC服务的。开启步骤如下:
    1. 新建jstatd.policy文件,例如/home/sdb/jstatd.policy,内容如下:
      grant codebase “file:${java.home}/../lib/tools.jar” {
      permission java.security.AllPermission;
      };  //注意:“${java.home}/../lib/tools.jar”必须这么写,这里的${java.home}不是系统这是的环境变量$JAVA_HOME
    2. 执行“sudo /usr/local/java/bin/jstatd -J-Djava.security.policy=/home/sdb/jstatd.policy -J-Djava.rmi.server.hostname=192.168.1.11 &” 启动jstat。注意,jstat必须以不低于tomcat的执行用户的权限来运行,一般是root,或者和tomcat一样。java.rmi.server.hostname就是JMX配置中的值,这个不能少。最后的“&”是为了让jstat在后台运行。jstat默认开启的端口是1099,如果想自定义端口,可以在命令后面(&之前)续上“-p ****”,例如“-p 9903”
  4. 防火墙配置对9901,9902,1099(9903,如果自定义过的话)端口放行,过程略去不表。服务器端的准备工作已经结束。

客户端VisualVM的准备工作

  1. 启动VisualVM,通过Tools–>Plugins–>Avaliable Plugins找到VisualGC 插件并安装。
  2. 添加Remote Host,输入IP:192.168.1.11  如果服务端jstat运行正常,很快在该节点下面就会出现相应的jstat节点。服务端运行了几个java进程,这里就会出现几个jstat节点。
  3. 在192.168.1.11这个节点上右键,添加JMX连接,填入端口9901以后确定就行。

以上工作做完以后,VisualVM的截图会如下所示,表示配置成功,然后就可以查看各种监控数据了。
image2014-1-23 14-3-31

发表评论?

2 条评论。

  1. jstat也需要两个端口,1099默认,还有一个是随机的。这个也不好弄防火墙策略。

  2. JMX连接的又无法使用GC插件,除了关闭防火墙,有没有更好的办法呢?

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>