jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)
一、问题概述
连接远程java应用除了jstatd方式,还有jmx方式。不必拘泥于一种,一种不行可以果断尝试另一种,兴许就行了。
姊妹篇在这:
jvisualvm连接远程应用终于成功,附踩大坑记录!!(二:jmx方式)
目前,在jvisualvm连接失败的相关互联网博客中,我还没看到有人和我一样的解决方法。
两天前,我像大家一样,在网络上搜索jvisualvm连接remote 应用的方法,然而,不知道为啥,我的开发机器的visualvm真就连不上远程主机上的应用。
试了同事电脑,试了改端口,试了wireshark抓包,(主要是看连接建立了没,我这边的现象是:地址应该没问题,不是网上很多博客说的hostname的问题,在本机向远程机器上的jstatd
发起连接请求后,没一会就被服务器端发了fin信号过来,把连接断开了;看下图,可以发现,有相当多的fin标志的消息)

总之,我试了不少办法。后来才觉得可能本机的visualvm工具有问题(或者我本机环境有问题),后来我又试了同事电脑,也不行;后来没法,只好试试开发用的服务器了(有一台windows server 2016的),结果,就成了。具体看下文吧。
jvisualvm连接远程应用主要有两种方式,一种是jstatd方式,这种的话,不需要应用预先设置jmx之类的参数,个人认为比较适合:远程服务器上的需要分析的java程序已经很慢,不响应了,连不上了,这时候就可以启动一个jstatd应用,供client主机连接;
一种是需要java应用启动前,就设置jmx相关的参数,当应用变慢时,就可以用jvisualvm连上去,分析原因。
二、操作步骤之jstatd方式
1、创建文件jstatd.all.policy
我是在jdk目录下的bin创建的,不在这应该也没关系。
[root@pas bin]# pwd
/usr/local/jdk1..0_161/bin
内容如下:(和网络上的很多博客不一样,我这边指定了绝对路径,没采用java.home,主要是我踩坑的时候,方便排除路径方面的影响)
grant codebase "file:/usr/local/jdk1.8.0_161/lib/tools.jar" {
permission java.security.AllPermission;
};
2、启动jstatd后台应用
命令如下:
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.19.114 -J-Djava.rmi.server.logCalls=true
(我是在/usr/local/jdk1.8.0_161/bin路径下运行的下面的命令,该路径下就有jstatd.all.policy文件。如果是在其他地方执行,记得指定绝对或相对路径)
其中,
-J-Djava.security.policy=jstatd.all.policy 指定路径
-J-Djava.rmi.server.logCalls=true 打印日志
-J-Djava.rmi.server.hostname=192.168.19.114 指定主机名,主机名应该和你用hostname -i命令执行出来的结果一致。 然后,我的/etc/hosts文件的内容如下:
[root@pas bin]# less /etc/hosts
192.168.19.114 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
不过,网络上都说改了/etc/hosts中的127.0.0.1为自己的ip地址后,执行hostname -i的结果,就会是自己在/etc/hosts中设置的ip地址,然而,我的不是这样:
其中的红圈是我的ip地址:

ps:如需要修改端口(默认为1099):
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.19.114 -J-Djava.rmi.server.logCalls=true -J-Djava.net.preferIPv4Stack=true -p
其中:
-p 5555 ----------修改端口为5555
3、启动后效果
[root@pas bin]# jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.19.114 -J-Djava.rmi.server.logCalls=true
Jun , :: PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection()-192.168.19.114: [192.168.19.114: sun.rmi.registry.RegistryImpl[::, ]: void rebind(java.lang.String, java.rmi.Remote)]
Jun , :: PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection()-192.168.19.114: [192.168.19.114: sun.rmi.transport.DGCImpl[::, ]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]
4、客户端连接-本机连接


注意到了吗,连接后,没有半点反应。
和网络上那些顺风顺水的宝宝们比起来,是不是很心累。。。我的为啥不行。不要急。我们换台电脑。
4、客户端连接-其他主机进行连接
在我翻遍了互联网上上百个网页后,几乎要放弃的时候,我决定再试试。
换了台电脑,一台开发用的服务器,系统是windows server 2016,装的jdk版本是jdk-8u121-windows-x64

三、结论
遇到bug时,可以尝试换台电脑吧。。。不过,你也不用瞎换。
经过我的尝试,我找到了一个稳定的组合,保证可以连上。
1、安装win7虚拟机
我在我的vmvare里,安装了一台虚拟机(win7 64位),镜像用的是下面这个(复制到迅雷下载):
ed2k://|file|cn_windows_7_ultimate_x64_dvd_x15-66043.iso|3341268992|7DD7FA757CE6D2DB78B6901F81A6907A|/
原始网站在这:

2、安装java
我用的是下面这个版本:
jdk-8u121-windows-x64.exe
3、试试visualvm吧,应该可以了
以上。
jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)的更多相关文章
- jvisualvm连接远程应用终于成功,附踩大坑记录!!(二:jmx方式)
一.问题概述 参考前一篇: jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式) 这篇主要讲讲jmx方式. 二.启动前设置jmx参数 我这边拿tomcat举例,其余java ...
- VUE使用微信JDK(附踩坑记录)
VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...
- 我用EasyExcel优化了公司的导出(附踩坑记录)
背景介绍 最近要改一个导出的功能,在原有的基础上,在导出一份明细数据,要求导出内容加在原有 excel 的第二个 sheet 上.考虑到数据量还比较大,干脆引入阿里的 EasyExcel 来做. 下面 ...
- 用JvisualVM监视远程tomcat
在tomcat的catcalina.sh 中java_opts 环境变量中添加以下参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...
- jvisualvm_使用jmx连接远程linux应用
[前提] JVisualVM是由Sun提供的性能分析工具,在Jdk6.0以后的版本中是自带的,如果是用Jdk1.5或以前版本的就得要单独安装了. [1]远程机器需要开启jmx 在使用jvisualvm ...
- jvisualvm_使用jstatd连接远程linux应用
[1]确定linux系统正确安装了ssh # sudo ps -e | grep ssh ①注意使用root,使用$会报如下错误: [appadmin@webcsuat2 ~]$ sudo ps -e ...
- jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“
Visual GC提示"不受此JVM支持",可以使用此方法解决. 一.添加配置文件 jstatd.all.policy [root@localhost /]# cd /usr/lo ...
- VS连接远程数据库,连接sqlserver2008,显示“基础提供程序在 Open 上失败”
今天安装完成VS2012后,在调试2010的程序的时候,出现“基础提供程序在 Open 上失败”,于是用vs连接远程sql2008,才发现问题是:“已成功与服务器连接,但是登录前的握手期间发生错误”, ...
- Jvisualvm监控远程linux下Tomcat
Jvisualvm监控远程linux下Tomcat 1.编辑tomcat/bin/catalina.sh 加入下面这段代码,中间无换行: CATALINA_OPTS="$CATALINA_O ...
随机推荐
- 树莓派挂载ntfs优盘
步骤一:解压安装NTFS-3G,使用如下命令. sudo apt-get install ntfs-3g 步骤二:配置挂载NTFS格式的移动硬盘 1. 首先得到NTFS分区的信息 sudo f ...
- 【WP8】为Webbrowser添加ScrollBar
在WP8中,控件WebBrowser没有提供对滚动条的支持,而在内置的IE中,却可以显示出滚动条(微软这是在坑我们吗),但如果在客户端使用Webbrowser的话,自己构造ScrollBar来显示 通 ...
- jiffies存放
固然书本上讲明jiffies是jiffies_64的低32位,但是我还是自己测试了下,重点在于链接脚本的写法. 此处只是为了测试,因此简化链接脚本. /* link.lds */ 1 ENTRY(_s ...
- daterangepicker日历插件使用参数注意问题
显示具体时间时分秒: timePicker设置为true,//有些资料写的pickerTime不太对 重点大坑:修改时间默认展示格式,把fomat写在locale中,网上很多资料说直接写在datera ...
- 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比
一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 关系模型1970年提出的,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型. 简单来说,关系模型指的 ...
- Unity用代码实现Remove Missing Script
[MenuItem("Edit/Cleanup Missing Scripts")] static void CleanupMissingScripts () { ; i < ...
- Unity3D热更新LuaFramework入门实战
http://blog.sina.com.cn/s/blog_6788cd880102w8qy.html http://www.manew.com/thread-91845-1-1.html http ...
- Base64编码——学习笔记
Base64是一种编码方式. 非加密 chcp->936 编码流程: 位数不够后面补0,例中补了2个0. 末尾加=表示结束符. GB2312,有些敏感词不能显示. GBK,是GB2312升级版. ...
- c++友元函數---16
原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例 ...
- [Scikit-learn] 2.1 Clustering - Gaussian mixture models & EM
原理请观良心视频:机器学习课程 Expectation Maximisation Expectation-maximization is a well-founded statistical algo ...