线上问题排查之使用Arthas

官网:https://arthas.aliyun.com/doc/

是什么?

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率

什么作用?

可以在线上的时候排查各种问题,详细的可以直接跳转官网。

  1. 实时诊断:可以在运行的 Java 应用中实时查看线程、堆栈、CPU 使用率等信息,帮助快速定位应用的性能问题和瓶颈。
  2. 方法追踪:可以对 Java 方法进行追踪,监控方法的调用情况、参数和返回值,用于定位代码中的问题。
  3. 监控应用类加载情况:可以查看应用中加载的类信息,包括类加载路径、加载时间等,帮助分析类加载问题。
  4. 内存分析:可以查看 Java 应用的内存使用情况,包括堆内存、非堆内存等,用于分析内存泄漏和优化内存使用。
  5. OGNL 表达式支持:可以通过 OGNL 表达式(对象图导航语言)来查看和修改 Java 对象的属性,方便动态调试。
  6. 热更新:可以在不重启应用的情况下,动态修改已加载类的代码,实现热修复问题。
  7. Spring 相关支持:针对 Spring 框架,Arthas 提供了专门的命令支持,帮助分析 Spring Bean、AOP 等相关问题。

怎么利用Arthas排查问题?

这里我的建议是直接去官网查看详细的文档,总的来说就是在服务器上启动一个arthas的jar包,然后根据项目的进程号进入对应的项目,这样就能查看到你这个项目运行的一切详细信息了,官网有详细的介绍的。

问题

在这里介绍这个工具主要是因为我个人在项目中碰到一个问题,前前后后我将近尝试了半个多月,才将问题定位到。
项目背景:我写了一套基于Netty搭建的客户端需要去连接另外一个厂家的服务端,同时我这里提供了一个ftp的服务器,对方需要将一些文件发送过来,我这里监听到文件变化,就需要及时响应给我们的系统。
问题描述:程序我部署到线上服务器去,然后隔3-4个小时就会出现跟对方断开连接的现象,然后由于又重连机制就会一直断开重连断开重连。然后我就想当然的以为是程序在解析时候的bug,导致程序断开重连,就和对方的研发沟通一起排查问题,经过拉扯,我打印详细报文,没发现有问题,然后又去招各种netty框架是不是会有问题之类的,然而一开始方向就错了。
由于当时人不在公司,只能查找线上排除问题的一些工具,然后就开始了使用这个Arthas工具线上进行排查问题。由于当时没有拍照或者截图记录啥的,没办法把这个具体的问题展现出来。问题最后定位到的是由于我监听文件的时候,当某个线程挂了,然后就会一直创建线程疯狂占用cpu资源,当cpu资源耗尽就会把我和对方厂家的连接进行断开。

总结

当遇上了一些线上的排查bug,使用Arthas是真的不错,本来我是打算记录下更完整的解决问题的思路的,发现没有截图啥的,所以也就草草的结束了。你可以通过Arthas可以清晰的定位到是这个程序有多少线程,然后哪个线程报错都是能清晰定位到的,跟JProfiler差不多,只是Arthas在线上部署很是简单,可以多使用。