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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值