线上应用诊断与调试利器——Arthas
文章插图
转载本文需注明出处:微信公众号EAWorld , 违者必究 。
?????什么是Arthas?????????????
Java 诊断利器 Arthas , 是阿里的一款开源工具 。 Github-alibaba/arthas 上可以看到它的介绍 。
【线上应用诊断与调试利器——Arthas】在日常开发中 , 当我们发现应用的某个接口响应比较慢 , 这个时候想想要分析一下原因 , 找到代码中耗时的部分 , 比较容易想到的是在接口链路的 IO 操作上下游打印时间日志 , 再根据几个时间点的日志算出耗时长的 IO 操作 。 这种方式没有问题 , 但是加日志需要发布 , 既繁琐又低效 , 这个时候可以引入一些线上 debug 的工具 , arthas 就是很好的一种 , 除了分析耗时 , 还可以打印调用栈、方法入参及返回 , 类加载情况 , 线程池状态 , 系统参数等等 , 其实现原理是解析 JVM 在操作系统中的文件 , 大部分操作是只读的 , 对服务进程没有侵入性 , 因此可以放心使用 。
Arthas能解决什么问题?
从我个人的使用经验来看 , Arthas至少帮我解决了以下几个问题:
- 监控某方法查看其整个调用链路 , 从而找出某次调用的性能瓶颈 。
- 反编译某个类 , 查看线上的代码是否与本地代码一致 , 避免没有提交代码而导致的问题 。
- 站在全局视角查看整个系统的运行情况 , 比如观察内存增长、GC的情况 。
- 在微服务架构背景下 , 通常本地没有完整的环境 , 此时可以直接在测试环境监控某个方法传入的参数是否正确 , 返回值是否正确 。
下载并启动arthas
输入以下命令启动arthas程序
curl -O-jar arthas-demo.jar
选择需要监控应用的进程编号 , 回车后Arthas会attach到目标进程上 , 并输出日志:文章插图
容器中使用
docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
甚至我们可以直接把arthas放到容器镜像文件中:COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
文章插图
Arthas常用命令
下面简要为大家介绍一下Arthas常用的几个命令 。
dashboard
使用dashboard命令会显示以下信息:
1. 当前最繁忙的一些线程
2. 显示应用当前使用的内存信息 , 包括堆内存、新生代伊甸区、老年代、非堆内存的使用情况 。
3. 显示程序的GC情况 , 包括YGC次数、总花费时间 , FGC的次数、总花费时间 。
4. 当前程序的一些信息 , 包括系统版本、JDK版本、程序运行时长等 。
文章插图
Thread
查看当前线程信息 , 查看线程的堆栈
// 查看 CPU 使用率 top n 的线程的栈 , 当前最忙的前 n 个线程:thread -n 3// 查看 5 秒内的 CPU 使用率 top n 的线程栈:thread -n 3 -i 5000?// 查看线程是否有阻塞:thread -b
文章插图
watch
有时候我们不太方便进行本地调试 , 这个时候可以使用watch监控某个方法 , 然后点击相关的功能 , 查看该方法的调用情况:
watch com.primeton.dgp.assets.controller.DsResourcePoolController getResourcePool "{params,returnObj}" -x 2
执行以上命令后 , 控制台会hold在被监控的方法上 , 此时再次点击页面上的按钮 , 控制台就会打印此次的调用结果 。文章插图
trace
trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径 , 渲染和统计整个调用链路上的所有性能开销和追踪调用链路 。 通常我们用这个方法可以看到整个调用路径的耗时 , 从而找出真正的性能瓶颈 , 帮助解决问题 。
trace com.primeton.dgp.assets.controller.DsResourcePoolController getResourcePool
文章插图
tt
tt方法执行数据的时空隧道 , 记录下指定方法每次调用的入参和返回信息 , 并能对这些不同的时间下调用进行观测 , 使用方法如下:
tt -t com.primeton.dgp.assets.controller.DsResourcePoolController getResourcePool
执行此命令后 , arthas会记录下指定方法的每次调用环境现场 , 并打印一些相关的信息 , 如调用时长、是否正常返回、是否抛出异常等 。
- 发展|我省要求互联网平台坚持依法合规经营 推动线上经济健康规范发展
- 职工组一等|全国人工智能应用技术技能大赛落幕 青岛四名选手获一等奖
- 小米|华为成俄罗斯线上销售最受欢迎品牌!小米紧随其后
- Play|Google Play公布2020年度最佳应用和游戏排行榜
- 每日|【每日idea 分享】12月1日:带朋友一起网上购物;线上笔记本应用程序
- 商务参赞柏|秘鲁海外馆正式入驻京东国际 秘鲁期待与中国更多线上经贸合作
- 消费|宿言:早看早应用~提升零售产品销售额的9个手段!
- 俄罗斯|厉害了!华为手机在俄罗斯线上销量第一
- 开发|三七数字产业平台率先在全国开发应用
- 开发|打通数据应用瓶颈 激活应用场景开发