通过 JVM 查看关于 Apache Geronimo 的统计信息
2010-04-23 00:00:00 来源:WEB开发网对于看上去更为有趣的统计信息,可以使用专门的工具。开放源码的工具和商业工具都可以使用。还可以使用 Sun 提供的一些用于与 HotSpot 一起使用的工具。jvmstat 项目包含几个用于监视 JVM 统计信息的工具,包括一个叫做 Visual Garbage Collector 或 visualgc 的图形工具, 它使用起来相对简单。您需要 Java 5 或更高版本来运行 jvmstat,尽管它可以附加和监视 1.4.2 或更高版本的 JVM。只需下载和解压即可。将它添加到您的路径,即可准备运行。启动了 Java 进程时,请使用 jps 工具来通过键入 jps 标识其 JVM。它向您提供一个正在运行的 Java 进程的列表,这些进程以其 JVM 作为 ID。然后使用您想监视的进程的 ID 调用 visualgc。jvmstat 发行版包括一个用于调用 visualgc 的 shell 脚本。如果安装了 cygwin 这样的工具,就可以在 *nix 或 Microsoft® Windows® 上调用 visualgc 了。此外,也可以按以下方式调用它:
java -Xbootclasspath/p:%JAVA_HOME%\lib\tools.jar -jar %JVMSTAT_HOME%\jars\visualgc.jar 316
其中 JAVA_HOME 环境变量指定安装 JDK 的位置,而 JVMSTAT_HOME 指示安装 jvmstat 包的位置。该行末尾的 316 是您想监视的 JVM 的 ID。该 jvmstat 包还包括一个 jstat 工具。它提供在 visualgc 中看到的绝大部分相同信息,只不过将其作为文本输出。这对收集统计信息而言至关重要,然后可以将这些统计信息拖入另一个程序,以对其进行深入分析、生成有关它的报告,等等。本文集中讨论使用 visualgc 对这些统计信息进行可视化。
清单 1 提供一个短程序,您可以运行来测试使用 jvmstat 进行监视。
清单 1. 测试用 jvmstat 进行监视
StatGen.java
import 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);
}
}
更多精彩
赞助商链接