本地使用Jps/jconsole/jvisualvm远程连接服务器jvm的时候们经常会报连接超时等问题,这里除了网上搜出来的hostname、防火墙等常见问题外,这里我还列出一些其他的坑。
1、/tmp/hsperfdata_userName相关问题
java程序启动后会在/tmp/hsperfdata_userName(其中userName是当前登录用户)下自动生成一个以进程id为文件名的文件,这里存储了jvm运行相关信息,jps、jconsole、jvisualvm等工具的数据来源就是这个文件。如果排除了前面的问题外还是连不上,可以查看当前目录下是否有相关文件,如果没有,检查当前目录的读写权限,可能是没有权限,或者是java启动时进程文件存储位置被更改,通过参数-Djava.io.tmpdir来修改(重点检查tomcat相关参数)
2、jvisualvm通过jstatd启动后,默认是1099端口,可以通过 -p另外指定,这个时候有些同学开放了1099端口,本机通过telnet也能访问,但是 通过jps或jvisualvm死活连不上,总是报java.net.ConnectException: Connection timed out: connect错误。实际上,jstatd不但使用了1099端口,另外还随机指定了一个端口,通过netstat -anp |grep jstatd命令查看:
如图:必须把40127端口也打开才可以,特别是服务部署在阿里云,通过外网访问的同学特别注意,阿里云是有安全组的