`
wbj0110
  • 浏览: 1567090 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

VisualVM远程监控两种配置方法介绍

阅读更多

介绍一下Java程序远程监控工具。Java从最开始推出,核心特点就是对象自动收集机制,让程序员不需要像C++时代要进行配对对象书写。

 

但是,时至今日,我们依然能够看到很多Java程序运行一段时间之后,抛出StackOverFlowOutOfMemory等错误信息。这种时候,没有经验的开发人员只能盲目的面对所谓的“永不溢出”的JVM。应该说,在Java环境上进行内存管理和性能调优,更需要深厚的开发功底和知识体系。

 

Java虚拟机JVM调优的工具很多,本篇介绍一下一个开源性能监控工具VisualVM的远程配置功能。其中包括一些Linux版本JavaJBoss安装过程,也都一并加入,供将来有需要的朋友待查。

 

1VisualVM简介

 

VisualVM是一个以监控、显示本地或者远程服务器JVM工作情况,进行性能调优的工具。借助VisualVM,我们可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。

 

VisualVM是一个Java编写的绿色软件,属于开源范畴,官方地址为:visualvm.java.netVisualVM是使用插件Plugin的方式提供功能,默认提供了一些基本检测功能。如果需要进行拓展,可以使用下载插件的功能进行。

 

2Java Linux版安装

 

首先说说Java Linux版的安装过程。我们需要从Oracle官方网站上找到Java Linux版本(区分32bit/64bit)。一般可以选择rpm包安装,上传到Linux服务器上。

 

注意,实际工作中,建议创建一个专门的用户来进行java管理过程。实验中,笔者选择root帐号,是有一些不合适的。

 

 

[root@bspdev upload]# ls -l

total 123656

-rwxr-xr-x 1 activemq activemq 126484866 Oct 25 2012jdk-7u9-linux-i586.rpm

-rw-r--r-- 1 oracle  oinstall     1004 Sep 17 2012 pfile.ora

 

 

直接运行rpm –ivh jdk-7u9-linux-i586.rpm,就可以实现安装过程。过程自动化程度很高。之后,需要进行一些环境变量配置过程,主要是JAVA_HOMEPATHCLASS_PATH的设置。

 

 

[root@bspdev jdk1.7.0_09]# pwd

/usr/java/jdk1.7.0_09

[root@bspdev jdk1.7.0_09]# cd lib

[root@bspdev lib]# ls -l

total 26636

-rw-r--r-- 1 root root  396920 Sep 25 2012 ant-javafx.jar

-rw-r--r-- 1 root root 16615601 Sep 25 2012 ct.sym

-rw-r--r-- 1 root root  141738 Sep 25 2012 dt.jar

-rw-r--r-- 1 root root   18432 Sep 25 2012 ir.idl

-rw-r--r-- 1 root root  435849 Sep 25 2012 javafx-doclet.jar

-rw-r--r-- 1 root root   34383 Sep 25 2012 javafx-mx.jar

-rw-r--r-- 1 root root  409213 Sep 25 2012 jconsole.jar

-rwxr-xr-x 1 root root    7656 Sep 25 2012 jexec

-rw-r--r-- 1 root root     640 Sep 25 2012 orb.idl

-rw-r--r-- 1 root root 2566854 Sep 25 2012 sa-jdi.jar

-rw-r--r-- 1 root root 6570456 Sep 25 2012 tools.jar

drwxr-xr-x 6 root root    4096 Oct 25 2012 visualvm

 

 

修改.bash_profile文件。

 

 

[root@bspdev ~]# ls -al | grep .bash_profile

-rw-r--r-- 1 root root  191 Jan 6 2007 .bash_profile

[root@bspdev ~]# vi .bash_profile

 

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

       . ~/.bashrc

fi

 

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin

 

JAVA_HOME=/usr/java/jdk1.7.0_09

PATH=$PATH:$JAVA_HOME/bin

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

export JAVA_HOME

export CLASSPATH

export PATH

unset USERNAME

~

 

 

证明Java正常安装运行。

 

 

[root@bspdev upload]# java -version

java version "1.7.0_09"

Java(TM) SE Runtime Environment (build 1.7.0_09-b05)

Java HotSpot(TM) Client VM (build 23.5-b02, mixed mode, sharing)

 

 

3JBoss安装

 

JBoss安装是比较简单的过程。就是解压之后,配置对应目录。

 

 

[root@bspdev jboss-eap-6.1]# pwd

/jboss-eap-6.1

 

--环境变量

 

JBOSS_HOME=/jboss-eap-6.1

PATH=$PATH:$JBOSS_HOME/bin

 

 

6.1开始,Jboss开始两种启动模式:Standalone模式和Domain模式。启动脚本也从原来的run.sh变成standalone.shdomain.sh

 

 

[root@bspdev bin]# ./standalone.sh -b 192.168.137.88

=========================================================================

 JBoss Bootstrap Environment

 JBOSS_HOME: /jboss-eap-6.1

 JAVA: /usr/java/jdk1.7.0_09/bin/java

 

 JAVA_OPTS: -server -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

 

=========================================================================

 

05:42:52,747 INFO [org.jboss.modules] (main) JBoss Modules version 1.2.0.Final-redhat-1

05:42:53,164 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1

05:42:53,354 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015899: JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8) starting

(篇幅原因,省略部分……

05:42:58,430 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8) started in 6445ms - Started 123 of 177 services (53 services are passive or on-demand)

 

 

 

4Jstatd RMI远程监控方法

 

VisualVM在监控本地JVM的时候是很方便的。只要应用程序运行起来,我们就可以从VisualVM里面监控出来。

 

远程服务器上的JVM监控就需要一些额外的配置了。目前VisualVM支持两种监控方法:Jstatd方法和基于JMX的方法。我们先介绍Jstatd方法。

 

Jstatd方法是利用后台的RMI守护进程来实现对远程JVM的监控。首先创建一个监控策略文件。

 

 

 

[root@bspdev jboss-eap-6.1]# ls -l | grep jst

drwxr-xr-x 2 root root  4096 Jul 5 05:54 jstatd

 

--策略文件内容

[root@bspdev jstatd]# cat jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {

   permission java.security.AllPermission;  

};

 

 

调用jstatd命令启动进程。

 

 

[root@bspdev jstatd]# hostname -i

192.168.137.88

 

[root@bspdev jstatd]# jstatd -J-Djava.security.policy=jstatd.all.policy

 

 

此时,在监控程序VisualVM添加一个远程主机之后,自动显示出监控进程情况。

 

 

 

Jstatd监控方式下,SamplerMBeansJConsole是不能启用的。

 

5JMX方式

 

JMX方式是我们监控应用服务器(JBoss)常用的方法。很遗憾的是笔者只实验成功了JBoss 4.4.2版本的功能。JBoss 6.1还不能成功。

 

连接JMX方法首先需要在Java端进行一些配置。

 

 

[root@bspdev jdk1.7.0_09]# cd $JAVA_HOME/jre/lib/management

[root@bspdev management]# pwd

/usr/java/jdk1.7.0_09/jre/lib/management

[root@bspdev management]# ls -l

total 28

-rw-r--r-- 1 root root 3998 Sep 25 2012 jmxremote.access

-rw-r--r-- 1 root root 2856 Sep 25 2012 jmxremote.password.template

-rw-r--r-- 1 root root 14097 Sep 25 2012 management.properties

-rw-r--r-- 1 root root 3376 Sep 25 2012 snmp.acl.template

 

 

首先利用password.template文件创建jmxremote.password文件,并且设置相应的读写权限。

 

 

[root@bspdev management]# cp jmxremote.password.template jmxremote.password

[root@bspdev management]# ls -l

total 32

-rw-r--r-- 1 root root 3998 Sep 25 2012 jmxremote.access

-rw-r--r-- 1 root root 2856 Jul 5 06:09 jmxremote.password

-rw-r--r-- 1 root root 2856 Sep 25 2012 jmxremote.password.template

-rw-r--r-- 1 root root 14097 Sep 25 2012 management.properties

-rw-r--r-- 1 root root 3376 Sep 25 2012 snmp.acl.template

[root@bspdev management]#

 

 

jmxremote.password中的权限部分注释标记去除。

 

 

 

# password "QED". The "controlRole" role has password "R&D".

#

# monitorRole QED

# controlRole  R&D

 

修改为:

 

monitorRole QED

controlRole  R&D

 

"jmxremote.password" 64L, 2852C written

 

 

同时,在JBoss启动文件run.sh的定义环境变量部分,加入如下内容。

 

 

if [ "x$JAVA_OPTS" = "x" ]; then

  JAVA_OPTS=" -Dcom.sun.management.jmxremote.port=9988                             

-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

else

  JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9988                   

-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

fi

 

 

下面,就可以增加JMX9988端口的连接。显示如下界面进行监控。

 

 

 

使用JMX监控的功能不支持Visual GC。对JBoss的支持性比较好。

 

5、结论

 

VisualVM是一种比较方便的性能监控工具,加之一定的JVM调优经验和知识,可以帮助我们实现性能优化。

分享到:
评论

相关推荐

    jvisualvm远程访问Linux环境中tomcat

    jvisualvm 有两种方法监控 Tomcat:jmx 方法和 jstatd 方法。jmx 方法直接远程连接 Tomcat,而 jstatd 方法需添加创建 `jstatd.all.policy` 文件,并执行命令 `jstatd -J-Djava.security.policy=jstatd.all.policy`...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包---java 源码 大量 实例

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包2

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包3

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包4

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...

Global site tag (gtag.js) - Google Analytics