java -jar 指定端口_Java可视化故障处理工具远程调试配置

本文详述了如何使用JConsole、VisualVM和JProfiler进行Java应用程序的远程监控和调试配置,包括JMX连接、jstatd连接以及插件的使用。还介绍了如何在服务器端设置指定端口,并在客户端建立连接,以实现内存、线程和性能的高效监控。
摘要由CSDN通过智能技术生成

本文介绍的几种工具适用于监控与分析Jvm堆内内存、栈、垃圾回收的状况。对于堆外内存的情况,只适用于DirectByteBuffer类,不适用于Unsafe类。

  1. JConsole
  2. VisualVM
  3. Jprofiler

JConsole

远程连接配置

JConsole只能使用JMX方式。

假设内网服务器IP为:xxx.xx.xx.xx,服务器端启动java程序命令如下:

java 
-Djava.rmi.server.hostname=xxx.xx.xx.xx          # 远程服务器ip
-Dcom.sun.management.jmxremote				 # 允许JMX远程调用	   
-Dcom.sun.management.jmxremote.port=8091     # 自定义JMX端口号
-Dcom.sun.management.jmxremote.ssl=false 	 # 是否需要ssl安全连接方式	
-Dcom.sun.management.jmxremote.authenticate=false # 是否需要密钥
-jar xxxx.jar

在客户端打开jConsole,输入服务器ip与端口号,用户与密码不用填,再点击连接。

本文中所有的图片的ip跟私有程序名都会进行遮掩,以保护个人隐私。

9d30142c7b36af8aab82fc4d4e256538.png

如出现不安全连接的提示框,允许即可,连接成功如下:

a21a4c6e7055a8f4ee64b032f80eef1c.png

如果-Dcom.sum.management.jmxremote.port配置为0,会随机指定一个端口号。但想查看这个端口号就不那么直观。

可以在代码中打印这个端口号:

String url = sun.management.ConnectorAddressLink.importRemoteFrom(0).get("sun.management.JMXConnectorServer.0.remoteAddress");
String portStr = url.substring(url.lastIndexOf(":") + 1, url.lastIndexOf("/jmxrmi"));
int port = Integer.valueOf(portStr);
System.out.println(port);

或者用netstate查看该java进程使用的网络端口号。一般会用到几个端口,其中一个就是。至于要怎么要精准找到这个端口,我也还没找到方法。

基础使用

内存监控:

可以查看堆中各个区的使用情况,以及看到gc的类型与时间。

f4deb77e36e76029fc31afc807261289.png

线程监控

可以查看每个线程的运行状态跟堆栈跟踪信息,甚至提供了死锁检测的功能。

7ab49b9a54c40dc141394582b11b8175.png

VisualVM

VisualVM与JConsole一样,也是jdk自带的调试工具。但相比jConsole,它的功能会强大一些,并可安装插件,增强该软件的能力。

远程连接配置

VisualVM有两种远程连接的方式,一种是可以使用上章节的JXM方式,另一种是使用jstatd。不过两种都不能支持所有功能,如前者不能使用插件VisualGC,后者不支持显示Cpu的监控与抽样器。幸运的是可以同时使用这两种连接方式。

VisualVM通过JXM方式连接:

创建远程服务器:

ffe1c03689e9e2bbb5a612892ad9e3a6.png

右键远程服务器,并选择“添加JMX连接…”

c7c5bc12fa5bb5cff395ab528270c4e3.png

双击该新连接,即进入该远程服务器java进程的监控界面

a2ee4378545fe72488d98abbdb5dfc5e.png

Jstatd连接方式:

在服务器端创建jstatd.all.policy文件,并编辑如下:

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

运行命令:

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=xxx.xx.xx.xx &

如果不用-p参数指定端口号,则默认端口是1099。如果成功运行,则能在开发机的VisualVM左侧列表列出与jstatd执行用户相同的所有java。

686615cc8ccddf05fc14063c4eafe1a1.png

注意采用上面statd的配置,同网络的用户都可以访问到这些进程。如有完全策略的要求,则要小心谨慎使用。

插件使用

插件下载地址:https://visualvm.github.io/pluginscenters.html

402b7b05f822b1e6ac43555a16e0b79f.png

通过java的版本选择对应的插件版本

常用插件:

Visual GC:

52baef11ee1d3abcf8e9330a4924f66e.png

JProfiler

上面两款是JDK自带免费的分析工具,而JProfiler是收费的商业软件,功能比上面两款更为强大。

远程连接配置

1、将Jprofiler Linux安装包jprofiler_linux_11_1_4.tar上传到服务器,并解压到某目录下

2、服务器上进行jprofiler安装目录下的bin文件夹,执行./jpenable,会列出当前用户所有运行的java进程

9518378bcb0b7523cf8c4757fe15b446.png

3、输入待监控的进程后面的数字,如5,回车

f8fd2958e136d99f77d54e1212132c25.png

4、输入1,回车

65b92094e02114d30f4b98579518507e.png

5、输入一个指定的端口号,或保持系统推荐的端口,直接回车。

a2ad0217bd3477136a6a76b6e59560d0.png

至此,服务器端某个进程的配置已完成。

6、客户端jprofiler在已安装后的前提下,创建一个远程连接“Session”-> “New Session”,除了要填写远程服务器的IP与端口号,其他可以保持默认。

b025cf99333dc378ff945439e21d30a2.png

b19579a9be3c70f66957110e0564bf0a.png

如下图有数据收到,则表示连接成功。

98bbdf77ec3acec4a67c182e05500c4d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值