记一次线上排查问题之Arthas

本文介绍了如何使用阿里开源的Java诊断工具Arthas进行线上问题排查。在与第三方联合调试时,通过Arthas监控特定Java进程,观察参数与返回值,实时定位接口调用问题,避免了加日志和频繁发布。Arthas支持命令行交互,具备自动补全功能,适合在不允许黑补丁的情况下进行问题诊断。
摘要由CSDN通过智能技术生成

Arthas是阿里开源的java诊断工具。所以有直接的中文官网可以查看,很是方便。

为了让用户理解arthas能做什么,arthas官网给出了很典型的问题场景,如下:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

经常定位现网问题的同学一定有过以上痛苦,当一个现网问题没有思路,或者有思路却发现缺少日志的佐证时,我们往往束手无策。

公司是明令禁止黑补丁的,我们没法去增加日志打印来定位问题,所以如果客户允许用诊断工具,arthas是个不错的选择。

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

 

本片文章针对第三、四点仅限一次排查:

背景:一次与第三方的联合调试中,本地利用postman使用他们提供的参数,可以成功调用接口,但是第三方调用,token校验就是不通过,多次排查无果,也别说加日志重新更新定位,因为更新一次不容易,经大佬点拨,了解到了Arthas,刚好服务器上也安装了。

安装arthas就不赘述了,官网很详细!

直接上排查过程:

1.连上服务器,找到arthas安装目录:比如我的:

arthas的目录下有个as.sh文件

执行命令:./as.sh

theme@ip:/opt/xxx/arthas> ./as.sh
Arthas script version: 3.1.5
[INFO] JAVA_HOME: /opt/xxx/release/servicesupport/jdk/1.8.0_242
lsof: status error on TCP:LISTEN: No such file or directory
lsof: status error on -i: No such file or directory
lsof: status error on TCP:3658: No such file or directory
lsof 4.80
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRstUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]]
 [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
lsof: status error on TCP:LISTEN: No such file or directory
lsof: status error on -i: No such file or directory
lsof: status error on TCP:8563: No such file or directory
lsof 4.80
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRstUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]]
 [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
Found existing java process, please choose one and hit RETURN.
  [1]: 80497 /opt/xxx/release/servicesupport/APIGateway/20190723165055/dgw-service/bin/jetty-distribution-9.2.22.v20170606/start.jar
  [2]: 15170 org.apache.flume.node.Application
* [3]: 83285 org.apache.catalina.startup.Bootstrap
  [4]: 79989 com.huawei.hirasp.masteragent.main.HiRASPMasterAgent
  [5]: 20664 org.apache.catalina.startup.Bootstrap
  [6]: 105658 org.apache.catalina.startup.Bootstrap
  [7]: 96890 org.apache.flume.tools.FlumeToolsMain
  [8]: 49247 org.apache.catalina.startup.Bootstrap

最后一块会有一些进程的id号,可事先使用 ps -ef|grep java,找出自己要排查的服务的进程号;

2.出入序号 3,即监控进程号为83285的java进程

3
Arthas home: /opt/xxx/arthas
Calculating attach execution time...
Attaching to 83285 using version /opt/xxx/arthas...

real	0m0.857s
user	0m0.428s
sys	0m0.036s
Attach success.
telnet connecting to arthas server... current timestamp is 1601278527
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          
                                                                                

wiki      https://alibaba.github.io/arthas                                      
tutorials https://alibaba.github.io/arthas/arthas-tutorials                     
version   3.1.5                                                                 
pid       83285                                                                 
time      2020-09-28 15:35:27                                                   

[arthas@83285]$

3.开始监控排查

命令:watch 全类名路径 方法名 "{params,returnObj}" -x 2

然后通知第三方开始调用,就可以实时监控服务器上的数据啦~

是不是很爽!!!

[arthas@83285]$ watch com.xxx.cloud.hitop.theme.filter.xxxxFilter isTokenCorrect "{params,returnObj}" -x 2
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 195 ms.
ts=2020-09-28 15:46:24; [cost=0.296437ms] result=@ArrayList[
    @Object[][
        @String[1232131313],
        @String[123132313213231],
        @String[1233213231232132],
    ],
    @Boolean[false],
]
ts=2020-09-28 15:46:29; [cost=0.19607ms] result=@ArrayList[
    @Object[][
        @String[123123123123],
        @String[1231321323],
        @String[12313123213],
    ],
    @Boolean[false],
]

 

还有很多其他的方法,以后有机会再一一使用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值