`
Rocky_rup
  • 浏览: 146420 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HouseMD, 比BTrace更实用的Java运行诊断工具

阅读更多

 

HouseMD 是一款非常敏捷的Java进程运行时的诊断调式命令行工具, 它具备安全易用高效的特点, 让它非常适合在要求严格的线上(生产)环境中使用.

特性

  • 交互式命令行
    • 支持Tab自动补全或候选列表提示
    • 支持命令历史
  • 查看加载类
    • 支持跟踪文件来源路径
    • 支持跟踪类加载器层次
  • 跟踪方法
    • 支持类短名字(SimpleName)和方法名(可选)限定跟踪目标
    • 支持根据抽象类或接口来限定其实现类的跟踪目标
    • 支持实时显示跟踪目标的摘要统计
    • 支持输出跟踪目标调用日志文件输出
    • 支持输出跟踪目标调用栈文件输出
  • 查看环境变量和属性(Comming soon)

为什么要有HouseMD

点击这里查看

BTrace 相比

  • 仅一个jar包, 部署简单, 使用简单
  • 无需编写脚本, 借助指令完成常见诊断操作, 且切换快速高效
  • 借助命令行提示, 能够快速准确定位要跟踪的目标
  • 支持查看加载类的信息, 这在容器的应用诊断场景非常有用
  • 通过跟踪限时和限次数的机制, 来控制给跟踪过程带来的消耗
  • 自动检测并解决容器应用中类加载的问题
  • 自身源码精简短小, 易于阅读掌握, 易于定制扩展

安装

快速安装

LinuxUnix的系统下, 在要安装HouseMD的路径下(建议将该路径加入系统PATH变量), 运行:

> curl -Lk https://raw.github.com/zhongl/HouseMD/master/bin/install | bash

HouseMD目前对Windows还不支持(相关Issue), 期待有需要的同志来贡献代码!

下载安装

> java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-x.x.x.jar

注意: 在 Mac OSX下, 选项-Xbootclasspath是不需要的.

入门

启动

假定你在 快速安装并将安装路径加入PATH 之后, 在命令行输入:

> housemd -h

你会看到HouseMD的帮助信息, 如下:

Usage: housemd [OPTIONS] pid
    a runtime diagnosis tool of JVM.
Options:
    -h, --help
        show help infomation of this command.
    -p, --port=[INT]
        set console local socket server port number.
        default: 54321
Parameters:
    pid
        id of process to be diagnosing.

真正要用起来, 则需要拿到你要诊断的java进程的ID(通过jpsps), 假设pid1234, 然后执行:

> housemd 1234

帮助

在显示若干行INFO信息后, 此时进入HouseMDShell提示符, 键入help指令, 可以查看其支持的内置指令:

housemd> help

quit      terminate the process.
help      display this infomation.
trace     display or output infomation of method invocaton.
loaded    display loaded classes information.

help后加上指令的名字, 如loaded, 便会显示具体指令的帮助信息:

housemd> help loaded
Usage: loaded [OPTIONS] name
    display loaded classes information.
Options:
    -h, --classloader-hierarchies
        display classloader hierarchies of loaded class.
Parameters:
    name
        class name without package name.

退出

退出支持三种方式:

  1. 键入quit指令
  2. 键入Ctrl + D
  3. 键入Ctrl + C

常见问题解答

点击这里查看

指令范例

loaded

housemd> loaded String
java.lang.String -> /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/rt.jar

查看类java.lang.String的加载路径

housemd> loaded -h ScalaObject
scala.ScalaObject -> /home/housemd/housemd.jar
    - com.github.zhongl.housemd.Duck$1@1e859c0
        - sun.misc.Launcher$AppClassLoader@1cde100
            - sun.misc.Launcher$ExtClassLoader@16f0472

查看类scala.ScalaObject的加载路径和类加载器层次.

注意: BootClassLoader由于不是Java语言实现, 所以不会显示.

trace

housemd> trace -t 2 TraceTarget$A.m
INFO : probe class TraceTarget$A
TraceTarget$A.m(int, String)    TraceTarget$CL@42719c            0            -ms    null
TraceTarget$A.m(String)         TraceTarget$CL@42719c            2            3ms    TraceTarget$A@401369

TraceTarget$A.m(int, String)    TraceTarget$CL@42719c            0            -ms    null
TraceTarget$A.m(String)         TraceTarget$CL@42719c            4            1ms    TraceTarget$A@401369

INFO : Ended by timeout
INFO : reset class TraceTarget$A

跟踪接下来2秒内TraceTarget$A.m方法的调用

每列的含义依次是: 方法全名(含参数列表), 当前类的加载器对象, 总计调用次数, 平均调用耗时, 调用的自身对象

housemd> trace -l 4 TraceTarget$D+.mD1
INFO : probe class TraceTarget$D
TraceTarget$D.mD1(int)    TraceTarget$CL@42719c            2           <1ms    TraceTarget$B@80cac9

INFO : Ended by overlimit
INFO : reset class TraceTarget$D

跟踪接下来4次抽象类TraceTarget$DmD1方法的调用

这里可以看到, 这个方法调用的触发对象是其实现类TraceTarget$B的实例

housemd> trace -i 4 TraceTarget$D+
INFO : probe class TraceTarget$D
INFO : probe class TraceTarget$B
TraceTarget$B.mC(String)       TraceTarget$CL@42719c            8           <1ms    TraceTarget$B@80cac9
TraceTarget$B.mD2(int, int)    TraceTarget$CL@42719c            8           <1ms    TraceTarget$B@80cac9
TraceTarget$D.mD1(int)         TraceTarget$CL@42719c            8           <1ms    TraceTarget$B@80cac9

TraceTarget$B.mC(String)       TraceTarget$CL@42719c           16           <1ms    TraceTarget$B@80cac9
TraceTarget$B.mD2(int, int)    TraceTarget$CL@42719c           16           <1ms    TraceTarget$B@80cac9
TraceTarget$D.mD1(int)         TraceTarget$CL@42719c           16           <1ms    TraceTarget$B@80cac9

INFO : Ended by timeout
INFO : reset class TraceTarget$D
INFO : reset class TraceTarget$B

跟踪抽象类TraceTarget$D所有方法的调用, 设定每隔4秒进行一次实时摘要显示, 直至默认结束条件达成

housemd> trace -d TraceTarget.addOne TraceTarget$A
......

跟踪TraceTarget.addOne方法和 TraceTarget$A的所有方法的调用, 并输出详细日志到文件

文件的路径, 请通过help trace 查看-d选项的说明获知

输出的detail文件内容:

2012-06-14 14:38:29 8ms [main] null TraceTarget.addOne [0] 1
2012-06-14 14:38:29 2ms [main] TraceTarget$A@995a79 TraceTarget$A.m [123] void
2012-06-14 14:38:30 0ms [main] null TraceTarget.addOne [0] 1
2012-06-14 14:38:30 0ms [main] TraceTarget$A@995a79 TraceTarget$A.m [123] void

日志每行以一个空格分隔, 每列的含义依次是: 日期, 时间戳, 调用耗时, 调用线程名, 调用方法的自身对象, 调用方法全名, 调用方法参数值列表, 返回值(或异常)

housemd> trace -s TraceTarget.addOne
......

跟踪TraceTarget.addOne方法, 并输出其调用栈到文件

文件的路径, 请通过help trace 查看-s选项的说明获知

输出的stack文件内容:

TraceTarget.addOne(Integer) call by thread [main]
    TraceTarget.main(TraceTarget.java:42)

更多信息请见常见问题解答, 或指令帮助

历史版本和未来规划

点击这里查看

疑问, 建议, 缺陷

欢迎任何疑问, 建议还有缺陷, 请至这里提交给我.

 

后记

HouseMD是基于字节码技术的诊断工具, 因此除了Java意外, 任何最终以字节码形式运行于JVM之上的语言, HouseMD都支持对它们进行诊断, 如Clojure(感谢@Killme2008提供了它的使用入门)), scalaGroovyJRubyJythonkotlin等.

 

1
0
分享到:
评论

相关推荐

    HouseMD:HouseMD是比BTrace更好的强大诊断工具

    HouseMD是一款基于Scala开发的强大诊断工具,其设计目标是超越BTrace,为开发者提供更为高效、精准的问题排查手段。在Java生态系统中,诊断工具对于识别和解决应用性能问题至关重要,而HouseMD就是这类工具中的杰出...

    HouseMD介绍.pdf

    综上所述,文档大致介绍了HouseMD这款Java应用程序诊断工具的功能、使用场景以及它在调试和性能分析方面的重要性。文档的描述暗示了HouseMD通过提供一系列强大的诊断和分析工具来帮助程序员更加高效地解决代码中出现...

    Java工程师应用技术汇总

    - **HouseMD**:故障诊断工具,可以收集各种信息帮助诊断问题。 - **jmxterm**:基于终端的JMX客户端。 - **TBJMap**:分析JVM堆转储文件的工具。 **1.1.4 Java诊断工具** - **Eclipse Memory Analyzer (MAT)**:...

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics