JVM 监控


注:
内容部分来源于《深入理解Java虚拟机》第二版

使用虚拟机监控工具,可以让我们更快捷和方便的了解程序的运行情况,帮让我们解决问题、优化代码。

JDK/bin 目录下有着 Java 给我们提供的工具,用于监控JVM的运行状况。

命令行工具

jps: 虚拟机进程状况工具

jps -l
参数说明
-q只输出本地虚拟机ID,省略主类的名称
-m输出虚拟机进程启动时传递给主类 main 函数的参数
-l输出主类的全名,如果进程执行的是 jar 包,输出 jar 路径
-v输出虚拟机进程启动时 JVM 参数

jstat: 虚拟机统计信息监视工具

jstat -gc 2764 250 20

命令说明:每隔250毫秒查询一次虚拟机进程 2764 的 gc 状况,一共查询20次

jinfo: Java配置信息工具

查询全部配置信息,$LVMID表示虚拟机进程ID

jinfo   $LVMID

查询BytecodeVerificationLocal参数值

jinfo -flag BytecodeVerificationLocal  29116

jmap: Java内存映像工具

jmap (Memory Map for Java) 命令用于生成堆转储快照(一般称为 heapdump 或 dump 文件),就是将当前的虚拟机信息以文件的形式保存下来。

jmap 的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列、java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。

选项说明
-dump生成java堆转储快照。格式为:-dump:[live, ]format-b, file=, 其中live 子参数说明是否只输出dump 出存活的对象
-finalizerinfo显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。
-heap显示Java 堆详细信息,如使用那种回收器、参数配置、分代状况等。
-histo显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat以ClassLoader 为统计口径显示永久代内存状态
-F当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成 dump 快照。

因JDK 版本不同,低版本中有部分选项只在 Linux/Solaris 下可以使用

示例:

jmap -dump:format=b,file=my.bin 3500

jhat: 虚拟机堆转储快照分析工具

jhat my.bin

运行成功之后,在浏览器访问: http://localhost:7000/ 就可以看到分析结果

jstack: Java 堆栈跟踪工具

jstack 命令用于生成虚拟机当前时刻的线程快照。

选项说明
-F当正常的输出请求不被响应时,强制输出线程堆栈
-l除堆栈外,显示关于锁的附加信息
-m如果调用到本地方法的话,可以显示 C/C++ 的堆栈

示例:

jstack -l 29116

可视化工具

JConsole: Java 监视与管理控制台

]

VisualVM:多合一故障处理工具

在这里插入图片描述

连接远程虚拟机

启动时指定虚拟机参数

-Dcom.sun.management.jmxremote.port=8096
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=106.14.32.244

示例:

java  -Dcom.sun.management.jmxremote.port=8096 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false  -Djava.rmi.server.hostname=106.14.xxx.xxx  -jar security-0.0.1-SNAPSHOT.jar 

经测试,这种方式可以使用 JConsole 来连接

在这里插入图片描述

配合jstatd工具提供监控数据

  1. 在JAVA_HOME/bin目录中创建文件jstatdAllPolicy(这个文件名称可以随便起,需要与jstatd启动时指定名称相同),将以下内容拷贝到文件中,并且保证文件的权限以及用户都正确:
grant codebase"file:${java.home}/../lib/tools.jar"{ permission java.security.AllPermission; };
  1. 在JAVA_HOME/bin目录中,执行以下命令:
./jstatd -J-Djava.security.policy=jstatdAllPolicy -p 8600 -J-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

经过测试,这种方式可以使用 jvisualvm 来连接:

在这里插入图片描述


参考:https://blog.csdn.net/chwshuang/article/details/44202561

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统中,可以通过以下方法对JVM进行监控: 1. jstat命令:jstat是JDK自带的一个命令,用于监控JVM的各种统计信息,如内存、垃圾回收、类加载等。可以使用以下命令查看JVM的统计信息: ``` jstat -<option> <pid> <interval> <count> ``` 其中,`<option>`是统计选项,如gc、class、compiler等;`<pid>`是Java进程的进程ID;`<interval>`是采样间隔时间;`<count>`是采样次数。 2. jps命令:jps命令也是JDK自带的一个命令,用于列出当前系统中正在运行的Java进程的进程ID。可以使用以下命令来查看Java进程的进程ID: ``` jps -l ``` 3. VisualVM:VisualVM是一个功能强大的Java监控和性能分析工具,它可以提供实时的JVM监控、线程分析、内存分析、垃圾回收等功能。可以通过下载VisualVM并安装在本地,然后连接到运行中的Java进程进行监控和分析。 4. JConsole:JConsole是JDK自带的一个图形化工具,用于监控和管理JVM。可以通过以下命令启动JConsole: ``` jconsole ``` 然后选择要监控Java进程进行连接。 5. 远程调试:可以通过在JVM启动参数中添加远程调试参数,如`-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<port>`来启用远程调试功能。然后使用远程调试工具,如Eclipse、IntelliJ IDEA等,连接到Java进程进行实时监控和调试。 这些方法提供了多种途径来对JVM进行监控和分析,可以根据实际需求选择适合的方法进行使用。监控JVM的统计信息和性能指标可以帮助我们了解应用程序的运行状态,及时发现和解决潜在的性能问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值