使用jconsole连接idea中启动的本地代码代码,发现链接失败。详情如下图:

Jconsole本地连接idea失败问题解决插图

针对Eclipse,网络是有相应的解决方案,比如在启动参数中添加如下内容:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8011
-Dcom.sun.management.jmxremote.ssl=false  
-Dcom.sun.management.jmxremote.authenticate=false

但是针对idea貌似并不起效,其实引起上面问题的最关键原因并不在于参数配置,而是程序启动的模式。

为了确保Jconsole连接时对应的程序还在执行,于是在idea中使用了debug模式,将程序暂停在某段代码上。

为了验证非debug模式是否可以连接成功,直接连接另外一个idea本身的进程,我们知道idea也是基于java开发的。此时可正常连接。

Jconsole本地连接idea失败问题解决插图1

为了再次验证是否是因为debug导致的,我们来写一个死循环的程序,让程序一直执行。此时再使用jconsole进行连接测试,看是否可以正常连接。

@Test
public void test9(){
	while (true){
			
	}
}

此时再使用jconsole进行连接发现可以正常连接程序。

Jconsole本地连接idea失败问题解决插图2

问题总结

其实针对jconsole连接jvm的测试体验过程中,如果需要暂停线程,或让程序一直执行下去,不能使用debug模式来进行操作,而且需要通过其他途径让线程一直执行下去。当排除debug模式之后,如果依旧有问题,那么再进行其他方面的排查和尝试,比如启动参数等。

debug原理:本质上debug原理是通过一种方式把jvm运行时的状态(变量值,当前运行行号,异常信息等等)传递回IDE进行显示。这种方式不能污染jvm运行时的数据,也就是需要在运行中途停得下来,又不会影响其继续执行。可以类比成水流,jvm运行时就像是水一直在流,断点相当于在水流经的某一处放置档板,使其完全停在此处,一旦档板放开,水流继续正常流淌。



Jconsole本地连接idea失败问题解决插图3

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2020/09/06/jconsole-idea-debug/