首页 > 编程语言 > 详细

Jconsole观察java程序

时间:2021-06-02 09:15:32      阅读:17      评论:0      收藏:0      [点我收藏+]

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

技术分享图片

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

技术分享图片

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

技术分享图片

想要使用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
技术分享图片

选择主类

技术分享图片

添加参数

技术分享图片

重新建立连接:

技术分享图片

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

技术分享图片
内存区、非内存区监控
技术分享图片

测试代码:

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,新生代内存被回收,对象进入老年代,对象未被真正清理。

技术分享图片
老年代:
技术分享图片

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

Jconsole观察java程序

原文:https://www.cnblogs.com/ldd525/p/14839352.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!