• Java性能分析基础(一):常用工具


    最近,想查看一个Java程序当前运行状态的需求,搜索了一些相关的工具、方法。

    操作系统的工具

    top

    性能监控的起点往往并不是JDK提供的工具,而是操作系统自带的一些监控工具。比如 top 命令查看实时的运行情况,包括CPU、内存等占用的情况。
    如果想看某一个具体进程的详细的线程的情况的话,可以使用 top -Hp procId 具体查看线程的情况,有关top命令可以参考这两篇文章的介绍:
    How to Use the Linux top Command (and Understand Its Output)
    How to Use the top Command in Linux

    vmstat

    vmstat 命令可以报告有关内核线程、虚拟内存、磁盘等的统计信息,使用 “vmstat 1” 会每隔一秒钟打印出这些统计信息,输出结果中第一列 r 表示当前系统正在运行或等待运行的线程数,cs 列表示上下文切换的数量,ussyid 分别表示CPU执行用户代码、操作系统代码、空闲时间的百分比,因此,一般这三列的数值加起来等于100。

    pidstat

    pidstat 命令用于监控单个任务的执行情况。同样可以指定具体的进程id,或者默认展示活跃的任务统计信息。有关该命令的详细介绍可以参考官方手册

    当然,学习命令的使用,最好的方式,还是查看对应的官方手册

    JDK

    JDK自身带了以下工具:

    • jcmd 它用来打印Java进程所涉及的基本类、线程和VM信息。它适用于脚本,可以像这 样执行:
      jcmd process_id command optional_arguments
      jcmd help 可以列出所有的命令。jcmd help 可以给出特定命令的语法。
    • jconsole 提供JVM活动的图形化视图,包括线程的使用、类的使用和GC活动。
    • jhat 读取内存堆转储,并有助于分析。这是事后使用的工具。
    • jmap 提供堆转储和其他JVM内存使用的信息。可以适用于脚本,但堆转储必须在事后分析工具中使用。
    • jinfo 查看JVM的系统属性,可以动态设置一些系统属性。可适用于脚本。
    • jstack 转储Java进程的栈信息。可适用于脚本。
    • jstat 提供GC和类装载活动的信息。可适用于脚本。
    • jvisualvm 监视JVM的GUI工具,可用来剖析运行的应用,分析JVM堆转储(事后活动,虽然jvisualvm 也可以实时抓取程序的堆转储)。

    (引用自《Java性能权威指南》)

    jstack

    可以通过 jstack 命令导出 ThreadDump 文件,这个文件具体列出了程序当前每一个线程的状态,当然如果运行的线程很多的话,直接查看文件的方式是不容易定位发现其中的问题的。这就有了一系列的分析工具,可以针对这个文件进行分析、并以图形化的方式展示出来,这样的结果查看起来就方便多了,具体的工具列表以及基本的分析方法步骤可以查看这片文章:How to Analyze Java Thread Dumps,文章中给出了一系列的分析工具,包括在线的以及单独的应用程序,注意在线工具中,FastThread 虽然功能强大,但会把文件上传到云端,这意味着你的文件有泄露的风险。

    小结

    本篇文章初步总结Java应用程序监控相关的一些工具,要想了解我们的程序目前的运行状况、详情,对监控工具的熟悉是不可或缺的,这里仅初步总计了最近用到的一个简单的命令,对其他的一些命令,我们也有必要提前了解下其作用,在后面再碰到相关的问题场景时,能够想到可以通过这些命令获取相关的信息也是很有必要的。

  • 相关阅读:
    AI图片生成 discord 使用midjourney
    基于android校园新闻APP开发的设计与实现
    微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习
    shell脚本学习记录1(运算符)
    小白学java-spring相关知识笔记
    代码随想录训练营二刷第三十天 | 332.重新安排行程 51. N皇后 37. 解数独
    【推荐系统】什么是好的推荐系统?个性化和非个性化推荐
    121. 买卖股票的最佳时机
    华为开源自研AI框架昇思MindSpore应用案例:梯度累加
    Python列表元组字典集合存储结构
  • 原文地址:https://blog.csdn.net/lyg673770712/article/details/127043119