2019独角兽企业重金招聘Python工程师标准>>>
VisualVM远程连接Linux监控JVM的方式有两种,一种是jstatd,另外一种是JMX,这里描述jstatd的方式:
1.通过google/baidu出来的文章做法大致都雷同这里给出我开始参考的连接http://lixjluck.iteye.com/blog/516447
2. 但是我所遇到的问题上文中没有解决, 我的问题是当我执行
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true
启动jstatd以后总是出现无法连接xx.xxx.xxx.xx的一个错误提示, 而这个 xx.xxx.xxx.xx却是该机器的外网IP,通过hostname -i 可以看到. 经过一番google没有发现这样的问题, 大多的问题出现在 无法连接127.0.0.1这样的错误. 参考http://blog.csdn.net/yangyan19870319/article/details/6732411
但是通过上面的连接中的文章,把我引向了一个相对正确的方向.我本身是在内网, 发起jps连接是内网地址, 那么服务器接收地址然后解析, 但是在服务器上/etc/hosts中没有对内网地址的映射, 只有一个127.0.0.1 localhost localhost .
然后通过jps help 看到jps 后面的参数是hostname, 遇上 通过查看 /etc/sysconfig/network里的HOSTNAME的值, 将其加入到/etc/hosts 当中 : 内网地址 hostname的值 localhost , 放在127.0.0.1的配置之前.
最后我的本机 jps 内网地址 ,成功连接. 这里通过JPS成功连接也就意味着 VisualVM 可以正常连接.
注: 还有一个问题就是, 虽然我可以telnet 通1099这个默认端口, 但是必须在关闭防火墙的情况下才能连接, 否者不行, 似乎远程连接的时候不仅仅1099这个端口别占用, 可能还有其他端口涉及.