介绍一下Java程序远程监控工具。Java从最开始推出,核心特点就是对象自动收集机制,让程序员不需要像C++时代要进行配对对象书写。
但是,时至今日,我们依然能够看到很多Java程序运行一段时间之后,抛出StackOverFlow和OutOfMemory等错误信息。这种时候,没有经验的开发人员只能盲目的面对所谓的“永不溢出”的JVM。应该说,在Java环境上进行内存管理和性能调优,更需要深厚的开发功底和知识体系。
Java虚拟机JVM调优的工具很多,本篇介绍一下一个开源性能监控工具VisualVM的远程配置功能。其中包括一些Linux版本Java和JBoss安装过程,也都一并加入,供将来有需要的朋友待查。
1、VisualVM简介
VisualVM是一个以监控、显示本地或者远程服务器JVM工作情况,进行性能调优的工具。借助VisualVM,我们可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。
VisualVM是一个Java编写的绿色软件,属于开源范畴,官方地址为:visualvm.java.net。VisualVM是使用插件Plugin的方式提供功能,默认提供了一些基本检测功能。如果需要进行拓展,可以使用下载插件的功能进行。
2、Java 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_HOME、PATH和CLASS_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)
3、JBoss安装
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.sh和domain.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)
4、Jstatd 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监控方式下,Sampler、MBeans、JConsole是不能启用的。
5、JMX方式
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
下面,就可以增加JMX的9988端口的连接。显示如下界面进行监控。
使用JMX监控的功能不支持Visual GC。对JBoss的支持性比较好。
5、结论
VisualVM是一种比较方便的性能监控工具,加之一定的JVM调优经验和知识,可以帮助我们实现性能优化。
相关推荐
jvisualvm 有两种方法监控 Tomcat:jmx 方法和 jstatd 方法。jmx 方法直接远程连接 Tomcat,而 jstatd 方法需添加创建 `jstatd.all.policy` 文件,并执行命令 `jstatd -J-Djava.security.policy=jstatd.all.policy`...
在远程监控方面,VisualVM 支持两种连接方式:jstatd 和 JMX(Java Management Extensions)。本文将详细介绍如何通过 JMX 方式配置并监控远程的 JVM 进程。 首先,要通过 JMX 方式监控远程 JVM,需要在远程主机上...
对于远程连接,VisualVM支持JMX远程监控,只需在JVM启动时添加适当的JVM参数即可。此外,VisualVM还支持插件扩展,可以通过安装各种社区开发的插件来增强其功能,比如对特定框架或库的性能分析支持。 在优化Java...
##### 3.5 监控远程Java应用 除了本地应用外,VisualVM还可以连接到远程主机上的Java应用进行监控。要实现这一点,需要先确保远程主机上安装了JMX代理服务,并允许远程访问。配置完成后,在VisualVM的导航栏中选择...
要监控远程服务器上的 Java 应用程序,如 WebLogic 服务器,需要进行额外的配置。 ##### 1. 添加远程主机 - 在 Java VisualVM 中选择“远程”标签页,然后右键点击并选择“添加远程主机”选项。 - 输入要监控的...
用户可以通过两种方式获取VisualVM。一种是使用JDK1.6 Update 7或更高版本,VisualVM已经包含在JDK的bin目录中,用户只需直接运行jvisualvm.exe即可。另一种方式是从VisualVM的官方网站下载最新版本的VisualVM。 3....
6. **采样和探查模式**:VisualVM提供了两种分析模式,采样模式用于快速概览应用的整体性能,而探查模式则提供更详细的低级别信息,但可能对应用性能有轻微影响。 7. **JVM配置和信息**:你可以通过VisualVM获取JVM...
在“Applications”导航栏中,你可以看到Local和Remote两个部分,分别代表本地和远程的应用。此外,VisualVM还支持安装插件,通过“Tools” -> “Plugins”菜单,推荐安装所有插件以增强其功能。 利用VisualVM,你...
Java Management Extensions (JMX) 是Java平台的一项标准技术,它提供了一种管理和监视Java应用程序的方法。通过JMX,开发者可以创建管理接口,暴露应用程序的内部状态,如性能指标、资源使用情况等,以便于系统管理...
在实际应用中,JMX与Spring的结合可以通过Spring Boot进一步简化,Spring Boot自动配置了JMX支持,只需要简单的配置就能开启远程监控。同时,JConsole和VisualVM等工具可以帮助我们直观地查看和操作通过JMX暴露的...
通常,GC分为两种主要类型:Scavenge GC(年轻代GC)和Full GC。年轻代GC主要处理新生代的对象,而Full GC则涉及到整个堆,包括年轻代和老年代,它的执行通常会导致较高的系统负载,并可能导致应用程序暂停,甚至在...
JMX还可以通过MBean服务器来实现跨应用的通信,并允许远程监控和管理。 ### MBeans MBeans是JMX的核心元素,它们是Java对象,负责封装管理信息和操作。有四种类型的MBeans: 1. **Standard MBean**: 定义了标准...
JMX(Java Management Extensions)是Java平台提供的一种标准管理框架,用于监控和管理应用程序、服务、设备等。在Tomcat这样的Java应用服务器中,JMX能够让我们深入洞察服务器的运行状态,包括内存使用、线程信息、...
而JMX(Java Management Extensions)是一种Java平台标准,用于提供管理和监控应用程序的能力。`catalina-jmx-remote.rar`这个压缩包文件,显然与通过JMX远程访问Catalina相关,让我们深入探讨一下这个主题。 首先...
在这个场景中,提到的两个jar文件——`jmx_remote-1_0_1_03-ri.zip`和`jmx-1_2_1-ri.zip`,都是与JMX相关的库,用于支持远程管理和监控。 1. `jmx-1_2_1-ri.zip`: 这个文件包含了JMX 1.2.1版本的Runtime ...
- 使用JMX(Java Management Extensions)工具,如jconsole或VisualVM,远程监控和诊断ActiveMQ服务器。 总的来说,Windows版Apache ActiveMQ 5.7.0是一个强大且灵活的消息中间件,适用于各种分布式和微服务架构。...
通过JMX,我们可以远程监控和管理Java应用程序,包括Java虚拟机(JVM)的性能指标以及应用服务器的各种性能数据。 JMX的核心组件包括: 1. **MBeans**:MBeans是JMX中的核心元素,它们是可管理的Java对象,代表...
通过JMX,你可以远程监控JVM,包括GC的详细信息。 4. **JFR (Java Flight Recorder)**:这是Java 11引入的一个强大的诊断和监控工具,可以记录JVM的详细事件,包括GC事件、线程活动、类加载等。JFR的数据可以被JDK ...
7. **工具使用**:关于"工具"的标签可能意味着博客中会介绍如何利用各种开发工具,如Maven或Ant进行构建,或者使用JConsole或VisualVM等监控工具对运行时性能进行分析。 这个博客文章对于初学者理解EJB和JBoss的...