Jconsole观察java程序

Posted 光头_强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jconsole观察java程序相关的知识,希望对你有一定的参考价值。

JConsole是JDK自带的调试程序,位于jDK的bin目录下:\\jdk1.8.0_73\\bin
JDK的bin目录下还提供了其他小巧的工具,如:jps.exe jhat.exe,jhat.exe jmap.exe等工具
在window上双击显示如下:

image

在本地启动一个程序:JConsole进入

image

但是显示异常:连接失败,是否重试

image

想要使用Jconsole实现监控必须添加以下参数:(重要)
-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3210 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

127.0.0.1是主机IP,如果是远程主机就填写远程主机ip
3210:端口,未被占用就行
在Eclipse添加虚拟机参数:

右击:选择Run Configurations
image

选择主类

image

添加参数

image

重新建立连接:

image

点击“不安全连接”后键入监控平台:

image
内存区、非内存区监控
image

测试代码:

public class OutOfMemoryErrorTest {
	static class OObject{}
	private static List <OObject> list = new ArrayList<OObject>();
	public static void main(String[] args) throws InterruptedException {
		while (true) {
		    Thread.sleep(100);
			System.out.println("1111111111111");
		     list.add(new OObject());
		}
	}
}

点击执行GC:观察PS Eden Space(新生代) 和 old Gen(老年代)内存关系:

执行GC,新生代内存被回收,对象进入老年代,对象未被真正清理。

image
老年代:
image

代码中不断加入到list集合中,即对象被引用,无法被收集器标记“死亡”,也就不会被垃圾收集器清理,随着每次gc,对选哪个“年龄”增长,有新生代进入老年代,随着时间增加,会造成内存溢出

以上是关于Jconsole观察java程序的主要内容,如果未能解决你的问题,请参考以下文章

JConsole监控Java程序的运行情况

jconsole工具检测堆内存变化的使用

JConsole是什么

JVM 监控工具——jconsole

如何使用 Jconsole 监控 Java 程序?

JConsole