一、问题概述

连接远程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|/

原始网站在这:

https://msdn.itellyou.cn/

2、安装java

我用的是下面这个版本:

jdk-8u121-windows-x64.exe

3、试试visualvm吧,应该可以了

以上。

jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)的更多相关文章

  1. jvisualvm连接远程应用终于成功,附踩大坑记录!!(二:jmx方式)

    一.问题概述 参考前一篇: jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式) 这篇主要讲讲jmx方式. 二.启动前设置jmx参数 我这边拿tomcat举例,其余java ...

  2. VUE使用微信JDK(附踩坑记录)

    VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...

  3. 我用EasyExcel优化了公司的导出(附踩坑记录)

    背景介绍 最近要改一个导出的功能,在原有的基础上,在导出一份明细数据,要求导出内容加在原有 excel 的第二个 sheet 上.考虑到数据量还比较大,干脆引入阿里的 EasyExcel 来做. 下面 ...

  4. 用JvisualVM监视远程tomcat

    在tomcat的catcalina.sh 中java_opts 环境变量中添加以下参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...

  5. jvisualvm_使用jmx连接远程linux应用

    [前提] JVisualVM是由Sun提供的性能分析工具,在Jdk6.0以后的版本中是自带的,如果是用Jdk1.5或以前版本的就得要单独安装了. [1]远程机器需要开启jmx 在使用jvisualvm ...

  6. jvisualvm_使用jstatd连接远程linux应用

    [1]确定linux系统正确安装了ssh # sudo ps -e | grep ssh ①注意使用root,使用$会报如下错误: [appadmin@webcsuat2 ~]$ sudo ps -e ...

  7. jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“

    Visual GC提示"不受此JVM支持",可以使用此方法解决. 一.添加配置文件 jstatd.all.policy [root@localhost /]# cd /usr/lo ...

  8. VS连接远程数据库,连接sqlserver2008,显示“基础提供程序在 Open 上失败”

    今天安装完成VS2012后,在调试2010的程序的时候,出现“基础提供程序在 Open 上失败”,于是用vs连接远程sql2008,才发现问题是:“已成功与服务器连接,但是登录前的握手期间发生错误”, ...

  9. Jvisualvm监控远程linux下Tomcat

    Jvisualvm监控远程linux下Tomcat 1.编辑tomcat/bin/catalina.sh 加入下面这段代码,中间无换行: CATALINA_OPTS="$CATALINA_O ...

随机推荐

  1. Android带进度条的文件上传,使用AsyncTask异步任务

    最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. A ...

  2. Linux下MySQL开放root的远程访问权限

    mysql默认只能从本地连接,所以要使root可以远程访问登录,需做如下设置: 1.授权 请使用以下命令 mysql> Grant all privileges on *.* to 'root' ...

  3. 一下删除MSSQL表所有的数据,但不删除表结构

    --CREATE PROCEDURE sp_DeleteAllData--AS--EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT AL ...

  4. ispriter自动构建css-sprite

    优化你的网站: 当一个网站中的资源(比如:js文件.css文件.图片等)很多时必然影响用户访问速度,这时候你就需要做网站性能优化,你可以选择把资源分开放在不同的服务器上,因为一个资源服务器最多可以同时 ...

  5. Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  6. Android 4.0以上BlurMaskFilter效果无效

    Android MaskFilter的基本使用: MaskFilter类可以为Paint分配边缘效果.        对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换.An ...

  7. Eclipse------使用Maven install出错:编码GBK的不可映射字符

    使用Maven install时报错:编码GBK的不可映射字符 原因:Maven默认使用GBK进行编码 解决方法: 在pom.xml文件中添加如下代码即可 <project> <pr ...

  8. 8 -- 深入使用Spring -- 7...1 启动Spring 容器

    8.7.1 启动Spring容器 对于使用Spring的Web应用,无须手动创建Spring容器,而是通过配置文件声明式地创建Spring容器.因此,在Web应用中创建Spring容器有如下两种方式: ...

  9. Java NIO原理 图文分析及代码实现

    Java NIO原理图文分析及代码实现 前言:  最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请 ...

  10. iOS Runloop的超级讲解

    这是目前看过的最好的一片中文讲解RunLoop的文章,推荐给大家看一下,原文链接:http://blog.ibireme.com/2015/05/18/runloop/ https://segment ...