Skip to content
This repository has been archived by the owner on Mar 14, 2019. It is now read-only.
zhongl edited this page Jun 14, 2012 · 21 revisions

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

特性

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

为什么要有HouseMD

点击这里查看

BTrace 相比

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

安装

快速安装

LinuxUnix的系统下, 在要安装HouseMD的路径下, 运行:

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

若在Windows下, 请尝试下载安装

下载安装

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

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

入门

启动

假定你在 快速安装 好之后, 在命令行输入:

> 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.

常见问题解答

点击这里查看

指令范例

show

TODO

loaded

trace

历史版本

点击这里查看

参与贡献

构建

测试

结构

对于Scala程序员

对于Java程序员

参考资料

  1. BTrace
  2. javaagent
  3. 动态跟踪Java
Clone this wiki locally