Greys Anatomy诊断工具
Greys Anatomy诊断工具
Greys Anatomy是阿里巴巴早期开源的Java线上诊断工具,是Arthas的前身,提供了基础的诊断能力。
快速启动
# 下载Greys
# 访问 https://github.com/oldmanpushcart/greys-anatomy
# 启动
java -jar greys-boot.jar <pid>
# 或者使用Grep启动
./greys.sh <pid>@<ip>:<port>
核心命令
jad - 反编译
# 反编译类
jad com.example.service.OrderService
# 反编译指定方法
jad com.example.service.OrderService createOrder
# 保存到文件
jad -c <classloaderHash> com.example.service.OrderService > /tmp/OrderService.java
sc - 类搜索
# 搜索类
sc com.example.*
# 查看类详细信息
sc -d com.example.service.OrderService
# 搜索所有实现了某接口的类
sc -d implements javax.servlet.Filter
sm - 方法搜索
# 搜索方法
sm com.example.service.OrderService
# 搜索特定方法
sm com.example.service.OrderService create*
stack - 调用栈
# 查看方法调用栈
stack com.example.service.OrderService createOrder
# 带条件
stack com.example.service.OrderService createOrder 'params[0].amount > 1000'
trace - 追踪
# 追踪方法耗时
trace com.example.service.OrderService createOrder
# 过滤耗时
trace com.example.service.OrderService createOrder '#cost > 100'
watch - 监控
# 观察返回值
watch com.example.service.OrderService createOrder returnObj
# 观察入参
watch com.example.service.OrderService createOrder params
# 观察异常
watch com.example.service.OrderService createOrder throwExp
实战应用
排查线程问题
# 查看线程信息
thread
# 查看指定线程
thread <id>
# 查看死锁
thread -b
排查性能问题
# CPU采样
profiler start
profiler stop --format html --file /tmp/profile.html
# 方法耗时统计
monitor com.example.service.OrderService createOrder -c 10
与Arthas对比
| 特性 | Greys | Arthas |
|---|---|---|
| 维护状态 | 停止维护 | 持续更新 |
| 功能丰富度 | 基础诊断 | 诊断+监控+分析 |
| 社区支持 | 较弱 | 活跃 |
| 推荐使用 | 仅学习 | 生产推荐 |
小结
Greys Anatomy是Java线上诊断的先驱工具,学习其原理有助于理解Arthas等现代诊断工具的设计。