Arthas诊断Java问题

一、基础工具

  1. jstack:用于生成java虚拟机当前j时刻的线程快照,目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。

    jstack [option] vmid

 

二、安装启动

  1. 安装:下载arthas-boot.jar,然后使用java -jar arthas-boot.jar启动,同时需要输入诊断的应用进程ID;

  2. windows启动(在arthas目录下执行):as.bat  <pid>;

   3. 界面访问地址:http://127.0.0.1:3658

   4. Docker里使用Arthas工具:在Docker环境下会出现arthas无法使用,这个是因为一般应用使用的JRE,缺少工具类,所以应该安装JDK,比如:openjdk:8-jdk或者openjdk:8-jdk-alpine。

 

三、命令

  1. thread:查看当前线程信息,用户找出CPU占用较高的线程;

    A.展示当前最忙的前N个线程并打印堆栈:thread -n 10;

  2. trace:显示方法内部调用路径,并输出方法路径上的每个节点上耗时;

    A. 统计调用链路上的性能开销和追踪调用链路(查找耗时的方法,需要一步步往下追踪链路)

      trace org.springframework.web.servlet.DispatcherServlet doDispatch

    B. 根据调用耗时过滤数据(单位为毫秒)

      trace org.springframework.web.servlet.DispatcherServlet doDispatch '#cost > 1000';

  3. watch

 

  4. ognl

    A. 动态打印SQL日志,主要是更改日志级别为DEBUG,日志仍然在服务里存放日志位置地方看

      查看日志级别:ognl '@org.slf4j.LoggerFactory@getLogger("com.ruhuanxingyun.mapper")'

     日志级别改为DEBUG:ognl '@org.slf4j.LoggerFactory@getLogger("com.ruhuanxingyun.mapper").setLevel(@ch.qos.logback.classic.Level@DEBUG)'

   

可参考:Arthas官网文档

    Docker中使用Arthas

 

posted @   如幻行云  阅读(276)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示