jvisualvm 远程连接jboss

由于项目中使用jboss 作为web容器,每当项目上线时需要使用loadrunner对项目进行性能压测,这时就需要实时观察JVM的一些参数。想使用jvisualvm借助jstatd远程连接服务器上面的JVM时一直不能成功

在网上找了好些资料都始终没有成功,最终通过阅读jdk的相关源码终于使得jvisualvm借助jstatd能远程连接jboss。特写这篇博文记录解决问题过程。

当在命令中输入 jstatd时会出现如下错误:

找网上找许多资料对该错误的解决如下,实际上按照这样进行操作依然没有解决该错误。

创建安全策略文件,并命名为jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

通过阅读Jstatd的源码发现引起该错误的原因是为在该类的第139行调用了

System.setProperty("java.rmi.server.ignoreSubClasses", "true");

根据java安全沙盒机制,需要在jstatd.all.policy配置文件中添加如下内容:

grant {
  permission java.util.PropertyPermission "java.rmi.server.ignoreSubClasses","write";

};

所以完整的 jstatd.all.policy 配置文件如下

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

grant {
  permission java.util.PropertyPermission "java.rmi.server.ignoreSubClasses","write";

};

当解决上面的问题后,通过jvisualvm远程连接服务器上的jstatd一直连接不上。通过阅读jdk的rmi注册源码 发现有这么一行代码:

1  try {
2       host = java.net.InetAddress.getLocalHost().getHostAddress();
3   } catch (Exception e) {
4        // If that failed, at least try "" (localhost) anyway...
5        host = "";
6  }

这代码是获取本地IP地址。如果不在本机host文件中添加本机机器名对应的IP 则这行代码将返回127.0.0.1 这也导致了jvisualvm无法远程连接jstatd。

下面是完整的步骤

进入到jdk安装目录下,在/usr/java/jdk1.6.0_45/jre/lib/security 下创建jstatd.all.policy文件,文件的内容如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

grant {
  permission java.util.PropertyPermission "java.rmi.server.ignoreSubClasses","write";

};

编辑/usr/java/jdk1.6.0_45/jre/lib/security路径下面的java.security文件 policy.url.3=file:${java.home}/lib/security/jstatd.all.policy 如果 policy.url.3已经存在

可以使用 policy.url.n  n表示正整数。

 

编辑host文件中,添加对机器名称<---> ip映射

完成上面两步骤后,运行jstatd参数,因为没有指定端口,rmi默认注册使用的端口是1099 查看jstatd是否已经成功运行

出现了上面的截图,表示jstatd已经成功运行。关闭linux的防火墙。后在本机尝试使用jvisualvm远程连接jstatd。

终于 能通过jvisualvm 远程连接jboss,但是jvisualvm 中无法察看cpu和显示线程选项卡,后面还要进一步解决这个问题。

远程服务器使用的jdk的版本:

Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)

远程服务器使用的jboss版本为:

jboss-eap-6.3

时间: 2024-10-06 07:28:54

jvisualvm 远程连接jboss的相关文章

jvisualvm远程连接

1. 今天用jvisualvm远程连接linux上的jdk,jxm方式没有连接成功,后来发现是tomcat安装目录bin下的catalina.sh文件下的JAVA_OPTS中内容格式不对,要有空格,修改后kill javapid  重启tomcat,启动jstatd,Windows这边的jvisualvm就连接上了 2. 但是后来又遇到jstatd方式的连接不同,在网上找到 了答案,是因为hostname -i显示的127,应该显示为机器的ip,修改了/etc/hosts  ,如192.168.

jvisualVM远程连接JVM

1.基本环境 本地环境:Windows 7, jdk1.8.0_31 远程环境:Linux 2.6.32-642.11.1.el6.x86_64,Tomcat8.5 2.Tomcat配置 2.1 添加setenv.sh 在 Tomcat的bin下:vi setenv.sh,添加以下内容: #!/bin/sh JAVA_OPTS=" -Djava.rmi.server.hostname=192.168.12.213 -Dcom.sun.management.jmxremote -Dcom.sun.

使用JVisualVM 远程监控Tomcat程序中使用JMX鉴权访问

如何配置JVisualVM远程监控Tomcat程序请参考:http://hiandroidstudio.blog.51cto.com/5902332/1795310 1.配置JMX访问文件     # cd $CATALINA_HOME/conf/     # cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password     # chmod 700 jmxremote.password    (

JVisualVM远程监控

本文主要转自:http://blog.iamzsx.me/show.html?id=394002 http://www.wl566.com/wz/64022.html 1. 通过JMX方式监控远程linux上运行java程序 远程服务器: 要求在执行java程序时,加入若干参数: java -Dcom.sun.management.jmxremote.port=40124 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.

怎么解决mysql不允许远程连接的错误

最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示"1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server".解决办法如下: 方法/步骤 1 首先看报错窗口. 2 经查阅,错误原因是:本地IP(xxx.xxx.xxx.xxx)没有访问远程数据库的权限. 于是下面开启本地IP(xxx.xxx.xxx.xxx)对远程mysql数据库的访问权限. 3 首先远程连接进

VNCViewer Windows下远程连接Linux桌面

最近项目需求,需要将写的工程部署到centos6.5服务器上,但是出现了各种错误,就想着在linux下再调试代码.但是之前都是通过ssh链接远程服务器的,在ssh中肯定不能打开eclipse等集成开发工具,因此我们要在远程服务器上安装桌面及vncserver,然后在windows中用vncViewer连接. 一:服务器端(Centos6.5) 1:安装桌面: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME

Sql Server 2005的1433端口打开和进行远程连接

参考地址:http://topic.csdn.net/u/20090828/16/e693935a-99b7-4090-a6bc-0123c91183eb.html 1.如何打开sql server 2005 的1433端口配置工具->Sql Server Configuration Manager->MSSQLSERVER的协议看看TCP/IP协议是否启动,如果启动,右键菜单点"属性" ,在分页菜单中选"IP地址",把"IP1"和&

远程连接mongodb时,27017端口连接不上的解决办法

一.背景描述: 我在linux  RED7上安装了mongodb,并没有修改mongodb的配置文件.然后通过另外一台电脑用pymongo连接mongodb时,报错:timeout. ping IP 是成功的. telnet IP 27017 的时候,提示:27017端口连接不上. 二.解决过程: 各种百度,远程连接mongodb失败,网上资料显示原因有两个: 1.mongodb的配置文件中的bind_ip 默认为127.0.0.1,默认只有本机可以连接.  此时,需要将bind_ip配置为0.

power shell 远程连接

Powershell远程管理采用一种新的通信协议,Web Services for Management,简称WS-MAN它 通过http或者https进行工作,WS-WAN的实现主要基于一个后台服务:Windows远程管理(WinRM).Server2008R2中默认 开启该服务,从Server2012开始,该服务便集成在系统中默认开启,Win7默认安装此服务,但是默认为禁用状态,Win8,Win10默认开启. 这种远程连接不会被客户端察觉到,也不会占用远程连接数! 我们需要两台计算机进行测试