jvisualvm远程连接的三种方式

article/2025/10/13 18:17:14

文章目录

    • 基于jatatd实现远程连接
      • 配置安全策略
      • 启动jstatd
      • 远程连接
    • 基于JMX实现远程访问
      • 远程连接
    • 基于SSH的远程连接
      • 启动远程应用
      • ssh端口转发

基于jatatd实现远程连接

jstatd是一个基于RMI (Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口,从而允许监控工具远程地连接到本地的JVM

配置安全策略

默认情况下,Java的安全策略比较严格,并不允许jstatd直接启动,因此,需要设置下安全策略。不同的JDK版本配置方式不同,主要是由于JDK9开始,已经不再有tools.jar导致的。
创建安全策略文件,命名为:jstatd.all.policy,下面是各个版本的配置方式:

Jdk8以及更低版本

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

jdk9以及更高版本

grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;
};grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;
};

启动jstatd

根据jdk版本创建文件,写入上面的内容

[bushro@hadoop132 ~]$ vim jstatd.all.policy
  • 远程服务器上执行
  • 执行jstatd命令的用户和你jstatd想连接的应用必须拥有相同的用户凭证。如果说jar是使用root启动的,那么下面的命令也要用root执行。

在jstatd.all.policy所在目,执行如下命令

jstatd -J-Djava.security.policy=./jstatd.all.policy \
-J-Djava.rmi.server.hostname=192.168.233.132 \
-J-Djava.rmi.server.logCalls=true \
-p 1231
  • java.security.policy:指定上面策略文件的路径,使用相对路径或绝对路径均可
  • java.rmi.server.hostname:指定成允许连接的IP地址、主机名或域名
  • java.rmi.server.logCalls:打印日志
  • -p:用来指定注册端口,默认1099

另外开一个窗口查看jstatd使用到的端口
在这里插入图片描述
开放监听端口或者关闭防火墙都可以

# 开放1231(取决于启动jstatd的-p参数)、14776端口(随机,依赖于netstat -luntp|grep jstatd的结果)
firewall-cmd --zone=public --add-port=1231/ticp --permanent
firewall-cmd --zone=public --add-port=14776/tcp --permanent
# 重载防火墙规则
firewall-cmd --reload
# 查看当前开放的端口,确认端口已成功开放
firewall-cmd --zone=public --list-ports

远程连接

启动一个java程序
在这里插入图片描述
打开jvisualvm软件,在安装的jdk的bin目录下
远程->添加远程主机
在这里插入图片描述
就可以检测到应用的内存使用情况
在这里插入图片描述
jstatd的方式远程连接的话不支持cpu内存的抽样检测。这是一个不方便的地方。

基于JMX实现远程访问

启动应用程序

java -Djava.rmi.server.hostname=192.168.233.132 \
-Dcom.sun.management.jmxremote.port=1232 \
-Dcom.sun.management.jmxremote.rmi.port=1240 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-jar jvm-1.0-SNAPSHOT.jar
  • java -Djava.rmi.server.hostname=192.168.233.132 \
  • -Dcom.sun.management.jmxremote.port=1232 \
  • -Dcom.sun.management.jmxremote.rmi.port=1240 \
  • -Dcom.sun.management.jmxremote.ssl=false \
  • -Dcom.sun.management.jmxremote.authenticate=false \
  • -jar jvm-1.0-SNAPSHOT.jar

查看端口

[bushro@hadoop132 software]$ ps -ef|grep jvm
bushro    21225  20771  6 22:32 pts/2    00:00:05 java -Djava.rmi.server.hostname=192.168.233.132 -Dcom.sun.management.jmxremote.port=1232 -Dcom.sun.management.jmxremote.rmi.port=1240 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar jvm-1.0-SNAPSHOT.jar
bushro    21346  20215  0 22:34 pts/1    00:00:00 grep --color=auto jvm
[bushro@hadoop132 software]$ netstat -antp|grep 21225
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp6       0      0 :::35792                :::*                    LISTEN      21225/java          
tcp6       0      0 :::1232                 :::*                    LISTEN      21225/java          
tcp6       0      0 :::1240                 :::*                    LISTEN      21225/java          
tcp6       0      0 :::8060                 :::*                    LISTEN      21225/java

使用上面的方法区开放端口

远程连接

打开jvisualvm 文件->添加JMX连接,输入ip和端口1232
在这里插入图片描述
这种方式是可以进行cpu和内存抽样的

这里我们关闭了用户认证进行登陆的,这对于生产环境来说是安全的。接下来我们开启认证的方式来连接。

准备账号文件,命名为jxmremote.access(名称随意),内容如下

admin readwrite
  • admin是账号,多个账号换行继续写即可。
  • readwrite指权限,readwrite表示可读可写;readonly表示只读。

准备密码文件,命名为jmxremote.password(名称随意),内容如下

admin 123456

admin是账号,123456是密码,多个账号换行继续写即可。

设置这两个文件的权限

chmod 600 jmxremote.access
chmod 600 jmxremote.password

启动应用程序

java -Djava.rmi.server.hostname=192.168.233.132 \
-Dcom.sun.management.jmxremote.port=1232 \
-Dcom.sun.management.jmxremote.rmi.port=1240 \
-Dcom.sun.management.jmxremote.access.file=./jxmremote.access \
-Dcom.sun.management.jmxremote.password.file=./jxmremote.password \
-Dcom.sun.management.jmxremote.ssl=false \
-jar jvm-1.0-SNAPSHOT.jar

进行连接
在这里插入图片描述

基于SSH的远程连接

jstatd & JMX存在的问题:

  • jstatd虽然连接相对方便,但是没有考虑过网络安全相关的问题(对于公网环境,直接开放端口可能存在安全风险)
  • JMX虽然可以开启用户认证以及ssl,但是要做一堆的配置

使用本文的玩法,可以让jstatd更安全;让JMX的安全不那么麻烦。
使用SSH连接到JMX或jstatd的本质,是利用SSH实现了一个SOCKS代理,添加代理后,请求过程︰本地->连接SSH代理->转发到你想请求的地址。而SSH是安全的,所以这种方式也比较安全。

启动远程应用

远程服务器执行

java -Djava.rmi.server.hostname=192.168.233.132 \
-Dcom.sun.management.jmxremote.port=1235 \
-Dcom.sun.management.jmxremote.rmi.port=1250 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-jar jvm-1.0-SNAPSHOT.jar

当然还可以去开启认证,开启ssl

ssh端口转发

本机执行如下命令,ssh实现端口转发

ssh -v -D 9696 bushro@192.168.233.132

使用本地的windows powershell工具
在这里插入图片描述

输入远端bushro用的密码就可以了

  • -v: verbose模式,打印详情
  • -D:动态应用程序级端口转发,格式:-D [bind_address: ]端口。将会分配一个Sock并监听本地端口。与此端口建立连接后,该链接将通过安全通道转发,然后使用应用协议确定从远程计算机连接到的位置。

对于Windows机器,可利用SSH远程工具提供的代理功能。例如SecureCRT、XShell、PuTTY等,都支持而转发。

打开jvisualvm 点击工具->选项->网络
在这里插入图片描述
点击工具->添加jmx连接
在这里插入图片描述


http://chatgpt.dhexx.cn/article/JrhUG9Nt.shtml

相关文章

Jvisualvm监控本地、远程Java进程

Jvisualvm监控本地、远程Java进程 监控本地Java进程监控远端Java进程JMX创建配置文件开启远程监控启动Tomcat创建连接 监控本地Java进程 在命令行输入jvisualvm即可启动jvisualvm 双击某个进程即可打开 监控远端Java进程 Jvisualvm不仅是可以监控本地jvm进程,还可以…

Java VisualVM使用

工具所在位置:windows下jdk安装路径内,如 C:\Program Files\Java\jdk1.8.0_20\bin\ jvisualvm.exe 双击执行; 效果图如下: 可以看到我本机有一个tomcat运行的监控 VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC&#xff0c…

jvisualvm (Java VisualVM)

文章来源:https://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么 监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析… jvisualvmg已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本&…

jvisualvm监控远程jvm

方式一:JMX 1、服务端添加配置 在tomcat/bin/catalina.sh文件中添加如下配置: export JAVA_OPTS"-Xms256m -Xmx512m -Xss256m -XX:PermSize512m -XX:MaxPermSize1024m -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname192.168.16.239 …

jvisualvm插件安装

jvisualvm插件安装 jvisualvm是我们查看JVM内部结构和JVM调优的重要工具,在java的安装目录的bin目录下。我们安装的Java默认jvisualvm有很多插件是没有安装的。接下来我们来看一下jvisualvm的插件安装。 找到JDK版本对应的插件地址: 访问网址&#xff1a…

JVM调优之JConsole和JVisualVM工具使用

JVM调优过程中,常用JDK自带的两个工具JConsole和JVisualVM,有助于分析问题。下面是两个工具的使用方式。(我发现好多小伙伴居然都不知道这么强大的工具) 一、JConsole使用。 1、JConsole本地监控启动 首先在JDK的bin目录下&#…

JVisualVM安装Visual GC

1、手动下载 下载地址 VisualVM: Plugins Centers 我现在常用JDK8,我的版本号是91 所以打开网址,选择如下👇 选择对应的版本号之后,点击下面那个链接,之后会跳转到一个网页,找到Visual GC,点…

使用jvisualvm远程监控服务器上的jvm

转载文章:原文地址 在测试环境复现出了的研发自测没有发现的疑难问题如性能问题,排除服务器本身的问题之后,研发就需要定位问题。 我们可以直接远程监控测试环境的jvm查看监控进程的运行情况么? 我们可以直接远程dump测试环境的运…

Java jvisualvm简要说明

jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的java程序 以jd…

Java问题诊断工具——JVisualVM

这篇文章源自一次加班改bug的惨痛经历[,,_,,]:3 负责的一个项目占用不断增加,差点搞崩服务器(╥﹏╥)…… 一下子有点懵,不能立刻确定是哪里导致的问题,所以决定好好研究下这个之前一直被我忽视的问题诊断工具🔧——JVisualVM 嘿嘿…

JVisualVM的使用教程

一、前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢? 在JDK1.6后的版本是自带这个工具&#xf…

JVisualVM的使用实录

一、前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢? 在JDK1.6后的版本是自带这个工具&#xf…

jvisualvm的使用

jvisualvm的使用 VisuaIVM(All-in-One Java Troubleshooting Tool)是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾…

JVisualVM初步使用

JVisualVM初步使用 1、前言 jvm调优工具有常见的为Jconsole,jProfile,VisualVM, Jconsole: 为jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。JProfiler:商业软…

JVisualVM 简介

VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来…

VisualVM

VisualVM VisualVM基本认识 官网http://visualvm.github.io/ **VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。**…

JAVA性能分析工具--Jvisualvm使用方法

JDK自带的JAVA性能分析工具。它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本。点击一下jvisualvm.exe图标它就可以运行了。 这里是VisualVM 的官方网站:https://visualvm.dev.java.net,资料很全,同时提供V…

jvisualvm使用

一、jvisualvm安装 1、Java版本在1.8及1.8版本以下,JDK已经自带这个工具 2、Java版本在1.8的,需要安装visualvm https://visualvm.github.io/download.html 对于自行安装的版本,运行前需要配置一下路径 进入visualvm的etc的目录,修改visualvm.conf文件…

生成特定架构内核cscope数据库

tags代码浏览工具 tags工具介绍 一般来说,如果我们想要研究一个c/c项目的源码,我们首先要做的是为该项目生成tags文件,tags文件种类有很多,比如 ctags、etags、cscope、gtags 等,有关他们的区别可以参考下面链接里的…

Emacs+cscope手动创建索引(感受cscope的强大)(八十三)

1.cscope 创建索引 <1>.创建索引文件列表cscope.files # find . ! -path "./out/*" ! -path "./prebuilts/*" ! -path "./frameworks/*" -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cp…