最近需要在 Linux 系统上对 Java 的应用系统进行监测,就用到了 JDK1.5 附带的工具 jps ( Java Virtual Machine Process Status Tool ,查看 JVM 进程状态的工具), jstat(Java Virtual Machine Statistics Monitoring Tool ,运行数据监测工具 ) 以及 jstatd ( jstat 的 daemon 程序,利用 RMI 进行远程监控)。(建议可以使用 jvmstat 包,可视化的 jstat 监控工具,可以在 http://java.sun.com/performance/jvmstat/ 下载)
部署过程描述如下:
1. 在需要监测的机器(我这里是 Linux 机器)部署相关应用:
a)在你需要进行监测的机器上安装 JDK1.5 (狂晕一阵子),别倒下(这个部分就不多说了,因为如果这里还要解释的话,那我就晕了)。
b)正确设置 Java 的运行环境。
c)启动 jstatd 进程。
命令如下: ./jstatd -J-Djava.security.policy=all.policy
一般来说呢,这里是会出现问题的,那就是 permission 的问题了,还好, Sun 的网站上给了相关的解决方法,方法如下,在 vi $JAVA_HOME/jre/lib/security/java.policy文件中添加下面的代码:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然后重新启动 jstatd 进程。
d)完了,别让人乱动就好了,我经常是不小心就按 CTRL+C 把程序关闭了。
2. 在客户端(监控者使用的机器)的操作:
a)使用 jps 查看远端机器有哪些 JVM 进程在使用当中,命令如下:
jps 172.25.1.24 // 远端机器的 IP 地址或名称
屏幕输入如下:
13686 Jstatd
14115 XXXJavaServer
15117 Jserver
b)从上面可以看到远端机器的 Jstatd 进程已经启动起来了。我们就可以使用 jstat 对相关进程的具体情况进行查看。
Jstat 命令用法如下:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
解释如下:
Option 包括以下选项:
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation
Vmid 就是 jps 查看到的进程 id ,如上 Jserver 的进程 id 是 15117 。
Interval 是时间间隔,单位为毫秒, 1000 就是一秒。
Count 就是需要查看的次数。
例子假设我们需要查看 172.25.1.24 机器 vmid 为 15117 的 gc 的情况,可以输入下面的命令:
jstat -gc 15117@172.25.1.24 1000 3
然后你能看到四行信息(一行为 title ,剩下的就是你要的信息了),仔细看看就可以发现很多信息的了。
c) 那么下面就开始配置可视化的监控包, jvmstat ,下载好了后,解压到任意目录。
执行 visualgc ,然后就可以看到可视化的监控窗口。
例:
java -Xbootclasspath/p:"c:\Program Files\Java\jdk1.5.0_06\lib\tools.jar" -jar e:\jvmstat-3_0\jvmstat\jars\visualgc.jar 9088@10.5.1.116
成功执行后你就能看见一个 java 的监视窗口(样子还蛮专业的),这个时候就 可以开始监视了。
以下提供一个短程序,您可以运行来测试使用 jvmstat 进行监视。
StatGen.javaimport java.util.ArrayList;import java.util.List;public class StatGen { static final int MAX_BLOCK = 8*1024*100; public static void main(String[] args) { try{ int numLoops = 1; if (args.length > 0){ numLoops = Integer.parseInt(args[0]); } System.out.println("#loops="+numLoops); List<long[]> list = new ArrayList<long[]>(numLoops); for (int i=0;i<numLoops;i++){ int sz = (int) (Math.random()*MAX_BLOCK); long[] garbage = new long[sz]; if (sz % 5 == 0){ list.add(garbage); } System.out.println("Sleeping 0.5s"); Thread.sleep(500); } System.out.println("Done"); } catch (Throwable t) { t.printStackTrace(); } System.exit(0); }}
分享到:
相关推荐
- 使用JVMStat进行长时间监控可能会影响JVM性能,因此建议在必要时开启,并在问题解决后关闭。 - 了解JVM的内部工作原理是有效利用JVMStat的前提,否则可能无法正确解读监控数据。 总结,JVMStat 3.0是一款强大的...
JVMstat,全称为Java Virtual Machine Statistics Monitoring Tool,是Java平台提供的一种强大的性能分析工具,它可以帮助开发者和系统管理员深入了解Java应用程序在JVM(Java虚拟机)中的运行状态。这个工具尤其在...
jvmstat是一款功能强大的Java虚拟机(JVM)性能监控工具,能够实时监控JVM的性能,帮助开发者快速定位和解决性能问题。下面将详细介绍jvmstat的安装配置和使用。 Windows安装指南 在安装jvmstat之前,需要先安装...
在实际使用中,开发者和运维人员可以借助Jvmstat Chartist来定位JVM性能问题,比如内存泄漏、线程阻塞或者垃圾收集效率低下等问题。通过对这些指标的持续监控和分析,可以优化应用性能,提高系统稳定性。此外,由于...
VisualVM通过多种技术手段(例如jvmstat、JMX、SA以及Attach API)获取程序运行时的数据,并以此为基础进行动态性能分析。此外,VisualVM还会根据具体情况自动选择更为高效的技术方案,以减少性能分析过程对应用程序...
在实践中,经常遇到对JVM参数进行设置了,并且自己心里觉得应该不会出现内存溢出了;但不幸的是内存溢出还是发生了。 很多人百思不得其解,那我可以肯定地告诉你,你设置的JVM参数并没有起作用(本文咱不探讨没有起...
JVMStat是Java虚拟机的一种性能监控工具,它可以收集和显示关于JVM的内存使用、垃圾收集、线程活动等数据。在命令行中,可以使用`jstat`命令对JVM进行监控。 5. **第三方工具**: - **New Relic**:提供详细的性能...
- **jvmstat 3.0**:一种用于监视Java虚拟机运行时行为的工具。 - **Java SE6文档**:详尽的官方文档。 - **性能监控与管理** - HotSpot VM中的DTrace探测器 - 新的监控、管理和诊断功能 - 在Solaris OS上使用...
VisualVM的源码中包含了大量的Java API使用,如`sun.jvmstat`和`java.lang.management`包,它们提供了访问JVM内部信息的接口。通过阅读源码,我们可以学习如何获取和解析这些数据,这对于理解和优化Java应用程序的...
VisualVM 是一款免费且强大的 Java 性能分析工具,能够通过多种方式(如 jvmstat、JMX、SA 以及 Attach API)收集程序运行时的数据,并进行动态性能分析。它可以减少性能分析对应用程序的影响,提高分析的精度。 - ...
- **虚拟机层面**:使用`jvmstat`工具以及其他命令行选项如`-verbose`、`-Xprof`等来监控JVM的性能指标。 - **应用服务器层面**:通过JMX接口和其他自定义管理组件来进行远程监控和管理。 - **应用程序层面**:使用...
解决过程中,首先尝试了SUN提供的性能跟踪工具`jvmstat`,但发现JVM内存使用情况正常,GC(垃圾收集)也没有异常。接着搜索了"Out of swap space"的问题,但没有找到直接的解决方案。然后尝试通过`-XX:+...
2. 深入理解JVM:通过阅读`sun.jvmstat`、`sun.hotspot`等包的源码,可以深入了解JVM的运行机制,如垃圾收集、性能监控等。 3. 解决问题:当遇到JVM级别的问题时,查看sun包源码往往能提供直接的解决方案。 总之,...
- **1.6.5 使用HPjmeter分析性能数据**:详细说明了如何利用HPjmeter对收集到的数据进行分析,找出潜在的问题根源。 - **1.6.6 使用HPjmeter分析垃圾回收数据**:这部分讲解了如何使用HPjmeter来分析垃圾回收过程中...
- **jdk.internal.jvmstat**: 这个模块提供了JVM统计监测服务,用于获取关于JVM的性能数据。 - **java.management**: 提供了管理Java应用程序和Java平台的API,如监控和管理Java虚拟机和其他Java实体。 - **jdk....
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。
然而,它们对于理解JVM的工作原理和进行深度调试十分有价值。比如`com.sun`包下的`javaws`是Java Web Start的相关组件,而`sun.jvmstat`则提供了JVM统计监测工具。 在JDK1.5中,`sunw`包主要服务于Solaris操作系统...
它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,...
VisualVM1.3.9(2017年11月从官网下载并安装插件验证通过)通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更...
在Java中,我们可以使用`sun.jvmstat.monitor`和`sun.misc`包下的非公开API来访问注册表,但这种方法可能不适用于所有Java运行环境,因为这些API是非标准且可能在未来的Java版本中被移除。因此,更稳定的方法是使用...