RMI non-JRMP server at remote endpoint

又是一个jmx问题

jmx明明端口占用了, 而且相关java进程也起来了, 为什么会不能通过jconsole访问jmx呢?总是:RMI non-JRMP server at remote endpoint

证书不对吗? 为什么通过的密码,那个机器的jms-ssl证书和我本机的大小不一样? 权限问题? 明明没错的? 拿我的证书拷贝过去, 结果, 还是一样。。。

jmx-client.xml、jmx-server.xml配置问题?修改后报密码不对—— 那说明了原来密码是没问题的! 白名单?—— 我擦,现在的jmx启动加入了白名单功能: 只允许名单内的机器去连接。 加上白名单,重启,还是一样。。。。

他又开始不停的说我“靠猜”了,。。

真TM郁闷。 远程调试吧, 代码对应不上了。方法跳来跳去, 而且又卡, 实在搞不懂啊。。  好像行号不对啊。整个更新本机代码, 刷新,重新远程调试  。。。 仍然不行,,, 下载远端代码,反编译,发现一样的啊, 那为什么不能代码对应上呢 ——— 之前都是好好的,,,,, —— 看日志,我想可能是这样吧。。。 ( 我没意思到,我已经在猜了, 虽然日志提供了一定的证据,但是并不是直接原因)

他又开始不停的说我“靠猜”了。。。

在他的指导下, 添加上源码,代码可以对应得上的调试了

———— 这个就明显不是password的问题了,如果password不对,提示不是这样的。

仔细仔细再看看。 还是明白, 代码跳来跳去,而且远程调试有很卡, 我十分郁闷。 

最后还是他看到了原因。说是锁住了—— 我一听,好像是这么回事哦。—— 这代码里面到处是synchronized, 到处是filelock。 等等 , 还有很多的atomic的操作。。。 很多陌生api

我仔细看,可是没看到哪里有死锁啊,—— 他是怎么发现的? 通过jstat? jconsole? jvisualvm? jmap ?  哎

请教, 原来是死循环! 神奇的死循环!! 难怪之前调试有时候看到StackOverFlow呢!  难怪一个方法一直没反应过来呢,难怪他进去后就一直没出来了呢!难怪日志文件分秒不差的毫秒不差的不停打印日志呢!!  原来是死循环!!!  第一次在项目中碰到啊! 神奇了!

A类包含mapProceInfo等等

m1(processName) {

if(mapProceInfo.contains(processName)) {

  复杂的process信息读取过程,并添加到mapProceInfo中。——————  因为配置文件配错了,所以,mapProceInfo一直为空, 此处就显然死循环

  读取过程中又刷新proceInfos, 刷新需要获取proceInfos,获取proceInfos调用的正是mapProceInfo!!!

}

return mapProceInfo.get(processName);

}

如图, 长时间的stepping 即表示了死!循!环!!!

原文地址:https://www.cnblogs.com/FlyAway2013/p/3707650.html