在前面已经学习了JVM性能监控的命令行工具,接下来学习JVM性能监控的命令行工具,通过可视化工具可以更直观地监控JVM性能、处理JVM相关问题。
1、JConsole
JConsole( Java Monitoring and Management Console),是一款基于 JMX( Java Manage-ment Extensions) 的可视化监视管理工具。
它的功能主要是对系统进行收集和参数调整,不仅可以用在虚拟机本身的管理上,还可以用于运行于虚拟机之上的软件中。
1.1、JConsole连接Java程序
JConsole程序位于%JAVA_HOME%bin目录下,直接通过命令启动。

在新建连接对话框中,罗列了所有的本地Java应用程序,选择需要连接的程序即可。
下面还有一个用于连接远程进程的文本框,输入正确的远程地址即可连接。
如果一个程序需要使用JConsole与那成连接,则需要在启动Java程序时,加上以下参数:
复制代码
JAVA_OPTS="-Dfile.encoding=UTF-8"
JAVA_OPTS="$JAVA_OPTS -Dlog.dir=$LOG_PATH"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(本机IP) -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=xx"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
1.2、Java程序概况
使用JConsole连接了一个本地程序,在概述可以看到Java程序运行的概览信息,包括堆内存使用情况、线程、类、CPU使用情况四项信息的曲线图。

1.3、内存监控
内存的作用相当于可视化的jstat命令,用于监视被收集器管理的虚拟机内存。
它不仅包含堆内存的整体信息,更细化到eden区、suvivior区、老年代的使用情况。

为了更加清晰地查看内存地变化,运行下面一段程序,然后连接:
复制代码
/**
* VM参数: -Xms100m -Xmx100m -XX:+UseSerialGC
*/
public class JConcoleRAMMonitor {
/***
* 内存占位符对象,一个OOMObject大约占64KB
*/
static class OOMObject {
public byte[] placeholder = new byte[64 * 1024];
}
public static void fillHeap(int num) throws InterruptedException {
List<OOMObject> list = new ArrayList<OOMObject>();
for (int i = 0; i < num; i++) {
// 稍作延时,令监视曲线的变化更加明显
Thread.sleep(300);
list.add(new OOMObject());
}
System.gc();
}

最低0.47元/天 解锁文章
123

被折叠的 条评论
为什么被折叠?



