深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
87446 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

30 | Java虚拟机的监控及诊断工具(命令行篇)

-dump
-histo
-finalizerinfo
-clstats
-printcompilation
-gcutil
-gcoldcapacity
-gcold
-gcnewcapacity
-gcnew
-gcmetacapacity
-gccause
-gccapacity
-gc
-compiler
-class
替代jps、jmap、jinfo、jstack的功能
用于死锁检测
打印目标Java进程中各个线程的栈轨迹和持有的锁
修改目标Java进程的“manageable”虚拟机参数
查看目标Java进程的参数
子命令
分析Java虚拟机堆中的对象
子命令
打印目标Java进程的性能数据
打印所有正在运行的Java进程的相关信息
jcmd
jstack
jinfo
jmap
jstat
jps
jcmd
jstack
jinfo
jmap
jstat
jps
总结与实践
Java虚拟机的监控及诊断工具

该思维导图由 AI 生成,仅供参考

今天,我们来一起了解一下 JDK 中用于监控及诊断工具。本篇中我将使用刚刚发布的 Java 11 版本的工具进行示范。

jps

你可能用过ps命令,打印所有正在运行的进程的相关信息。JDK 中的jps命令(帮助文档)沿用了同样的概念:它将打印所有正在运行的 Java 进程的相关信息。
在默认情况下,jps的输出信息包括 Java 进程的进程 ID 以及主类名。我们还可以通过追加参数,来打印额外的信息。例如,-l将打印模块名以及包名;-v将打印传递给 Java 虚拟机的参数(如-XX:+UnlockExperimentalVMOptions -XX:+UseZGC);-m将打印传递给主类的参数。
具体的示例如下所示:
$ jps -mlv
18331 org.example.Foo Hello World
18332 jdk.jcmd/sun.tools.jps.Jps -mlv -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home -Xms8m -Djdk.module.main=jdk.jcmd
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Java虚拟机监控及诊断工具,重点关注了`jps`和`jstat`两个命令行工具。`jps`用于打印所有正在运行的Java进程的相关信息,而`jstat`则用于打印目标Java进程的性能数据,包括类加载、即时编译和垃圾回收等方面的数据。此外,还介绍了`jmap`、`jinfo`、`jstack`和`jcmd`等命令,它们分别用于分析Java虚拟机堆中的对象、查看和修改Java进程的参数、打印线程的栈轨迹以及替代前述命令。通过本文的总结,读者可以快速了解Java虚拟机监控及诊断工具的使用方法和相关技术特点,为Java应用程序的性能优化和故障排查提供了有力工具支持。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • 杨晓峰
    jmc早openjdk网站单独下载,目前需要7 ea版处理jdk11 http://jdk.java.net/jmc/

    作者回复: 谢谢峰哥!

    2018-09-30
    20
  • Geek_987169
    老师为什么官方文档介绍工具开头都有"This command is experimental and unsupported"这句话?

    作者回复: 翻译过来就是”我们不对结果负责” ;)

    2018-11-04
    2
    11
  • 嘿嘿,就喜欢这样的简单拿来主义,随学随用。老师能否深入讲一下这些命令的底层实现,对应的信息都是怎么获取到的?都是从哪里获取到的?如果说都是从JVM中感觉范围有点大,往细了讲是从JVM的什么地方获取的呢?

    作者回复: 记得很多是通过MXBeans的。然后JVM有个专门存放perf data的,JVM组件会将东西存在那,而jstat会从那里读取。 实现起来不复杂的,可以参考一下工具的源代码 https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/jdk.jcmd/share/classes/sun/tools

    2018-09-28
    5
  • Axis
    Jdk11下开源了jfr但是没有jmc这个工具查看性能文件 是为什么?

    作者回复: 怎么说呢,大佬们决定JMC应该另外下载。我揣测是为了减少JDK的编译时间,不确定哈

    2018-09-28
    2
  • 杨春鹏
    为什么我双击这些.exe,直接就闪退。

    作者回复: 都是命令行程序,没有GUI界面的

    2018-10-11
    1
  • Douglas
    老师讲的好像和jdk11 没啥关系吧

    作者回复: 嗯,以前版本都有这些工具。 只不过我使用了JDK11版本的这些工具,这句”注意”是用来避免结果有出入的。

    2018-09-28
    2
  • wkq2786130
    自己做的笔记,请大家斧正 http://weikeqin.com/2020/03/28/jvm-performance-tuning-monitoring-tool/
    2020-03-30
    6
  • 美滋滋
    null那位朋友 oom killer了解一下
    2018-10-10
    6
  • 田斌
    Jstack -F会导致Java进程一直挂起吗,说是jdk的bug,什么情况下会一直挂起呢
    2018-11-08
    1
    5
  • null
    老师, 你好 我想请教一个问题, 我们线上环境有一台tomcat偶尔会莫名的挂掉, 而且没有任何错误信息,日志都是正常的, 就像被kill -9一样。 请问这个怎么排查问题? 不会是人为的。 谢谢。
    2018-09-28
    1
    5
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部