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上双击显示如下:
在本地启动一个程序: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程序的主要内容,如果未能解决你的问题,请参考以下文章