Java 性能调优工具箱之 Java 监控工具

本贴最后更新于 1599 天前,其中的信息可能已经时移世异

要想深入了解 JVM 自身,需要使用 Java 的监控工具。JDK 自带以下所列工具

  • jcmd 它用来打印 Java 进程所涉及的基本类、线程和 VM 信息。它适用于脚本

    % jcmd process_id command optional_arguments

    jcmd help 可以列出所有的命令。

  • jconsole

    提供 JVM 活动的图形化视图,包括线程的使用,类的使用和 GC 活动

  • jhat

    读取内存堆转储,并有助于分析。这是事后使用的工具

  • jmap

    提供堆转储和其他 JVM 内存使用的信息。可以适用于脚本,但堆转储必须在事后分析工具中使用

  • jinfo

    查看 JVM 的系统属性,可以动态设置一些系统属性。可适用于脚本

  • jstack

    转储 Java 进程的栈信息。可适用于脚本

  • jstat

    提供 GC 和类装载活动的信息。可适用于脚本

  • jvisualvm

    监视 JVM 的 GUI 工具,可用来剖析运行的应用,分析 JVM 堆转储(时候活动,虽然 jvisualvm 也可以实时抓取程序的堆转储)

基本的 VM 信息

  • 查看 JVM 运行的时长

    % jcmd process_id VM.system_properties

    % jinfo -sysprops process_id
    这包括通过命令行-D 标志设置的所有属性,应用动态添加的所有属性和 JVM 的默认属性

  • 查看 JVM 版本

    jcmd process_id VM.version

  • jconsole 的”VM 摘要“页可以显示程序所用的命令行,或者用 jcmd 显示

    jcmd process_id VM.command_line

  • 获取对应用生效的 JVM 调优标志

    jcmd process_id VM.flags [-all]

  • 获取进程中所有标志的值

    jinfo -flag PrintGCDetails process_id

小结:

  1. jcmd 可用来查找运行中的应用所在 JVM 的基本信息,包括所有调优标志的值。

  2. 命令行上添加-XX:+Printflagsfinal 可输出标志的默认值。这在查看特定平台自动优化所判定的默认值是很有用。

  3. jinfo 在检查(某些情况加可以更改)单个标志时很有用

线程信息

jconsole 和 jvisualvm 可以实时显示应用中运行的线程数量。

  • 查看运行线程的栈信息,对于判断线程是否阻塞很有用。

    jstack process_id

  • 通过 jcmd 获取栈信息

    jcmd process_id Thread.print

类信息

jconsole 和 jstat 可以提供应用已使用类的个数。jstat 还能提供类编译相关的信息。

实时 GC 分析

jconsole 可以用实时图显示堆的使用情况。jcmd 可以执行 GC 操作。jmap 可以打印堆的概况,永久代信息或者创建堆转储。jstat 可以为垃圾收集器正在执行的操作生成许多视图

事后堆转储

jvisualvm 的 GUI 界面可以捕获堆转储,可以用命令行 jcmd 或 jmap 生成。堆转储是堆使用情况的快照,可以用不同的工具进行分析,包括 jvisualvm 和 jhat。传统上,第三方处理堆转储的工具都领先 JDK,像 Eclipse Memory Analyzer Tool。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...