什么是Arthas

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
怎样直接从JVM内查找某个类的实例?
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

本文通过对比传统排查方法和使用Arthas方法进行对比来介绍Arthas工具。

前期准备

首先准备一份Java代码,代码内容很简单,制造一个死循环,使cpu保持在较高的使用率上

import java.util.concurrent.*;
public class CpuDemo {public static void main(String[] args) {ExecutorService threadPool = new ThreadPoolExecutor(1, 1,1L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());threadPool.submit(() -> {while (true) {compute();}});}private static int compute() {int a = 2048;int b = 1024;return (a + b) * 10;}
}

将CpuDemo.java文件上传至Linux虚拟机中,并进行编译启动。

root@sanguo-virtual-machine:/home# javac CpuDemo.java
root@sanguo-virtual-machine:/home# java CpuDemo

我们可以看到 cpu升高并保持在了一个较高的使用率上

传统排查方式

  1. 使用jps命令打印Java进程

    可以看到我们刚才启动的CpuDemo,该步骤是确保我们的项目正常启动。

  2. 使用top -Hp pid 命令可以查看指定进程的线程信息,然后通过shift+p 按cpu使用率进行排序,查看结果。

    可以找到高占用 cpu 的线程 id 10776

  3. jstack命令打印线程信息

jstack 10764 |grep $(print "%x\n" 10776) -A 30


查看源代码后发现是compute()方法导致。该方法内是有死循环调用,导致 CPU 过高。问题找到。

使用Arthas

  1. 下载并运行Arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
  1. 选择我们要分析的进程

  2. 可以使用dashboard命令查看整体的情况

    我们可以看到,ID为8的线程对cpu的使用率占用最高,因该是这里出现了问题

  3. 可以通过 thread ID 的命令查看该线程的相关信息

  4. 也可以使用命令thread -n num 命令 查看占用占用资源做多的num个命令

    也可以得到相同的结果

  5. 若是项目处于线上阶段且项目文件较多。可以通过jad命令来查看该文件所在行的问题

  6. 热更新代码
    在某些项目重启十分繁琐的项目,而又出了bug需要订正的情况下,可以使用redefine命令进行热更新,减少损失。

    1. 使用jad命令反编译出现问题的class

      jad --source-only CpuDemo > /home/CpuDemo.java
      
    2. 修改问题代码
    3. 使用redefine命令热更新代码
      redefine /home/CpuDemo.class
      
    4. 切回刚才在运行的代码后台,发现代码已经更改

更多关于Arthas的功能,可以查看官方文档

Arthas文档

使用Arthas排查解决项目部署后CPU飙高问题相关推荐

  1. Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称

    Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称 解决: 到项目根目录打开.setting文件夹,找到"org.eclipse.wst.common.component&q ...

  2. 通过XShell将linux服务器上的Tomcat下项目部署后,怎样对日志操作来调试

    场景 使用XShell将linux服务器上的Tomcat下的项目部署后, 发现项目跑不起来. 此时你想通过查看Tomcat运行的日志来调试. 实现 可以进入到Tomcat下的logs目录下 输入: l ...

  3. 解决nginx部署后css、js、图片等样式不加载的问题

    解决nginx部署后css.js.图片等样式不加载的问题 参考文章: (1)解决nginx部署后css.js.图片等样式不加载的问题 (2)https://www.cnblogs.com/smallf ...

  4. CPU 飙高问题排查和解决方法

    摘要 本文档记录了排查 CPU 飙高问题的处理过程和解决方法,从多个方面进行分析和排查. 问题简述 在一个生产环境中发现 CPU 飙高问题,但是无法确定问题的具体原因. 排查方法 使用 jstack ...

  5. 使用arthas排查cpu飙高问题

    文章目录 一 1. 下载arthas 2. 启动 3. 选择指定jvm进程 4. 筛选线程 5. 日志分析 一 官方文档:https://arthas.aliyun.com/doc 1. 下载arth ...

  6. 记一次服务器CPU飙高使用率超过100%原因分析(Arthas)

    文章目录 背景 一.告警分析 二.原因分析 1.找到java进程 2.进入 Arthas 3. 使用 Arthas 找到CPU占用最高的线程 4.定位原因 5.解决方案 总结 背景 某天下午频繁收到预 ...

  7. 你要偷偷学会排查线上 CPU 飙高的问题,然后惊艳所有人!

    作者 l Hollis 来源 l Hollis(ID:hollischuang) 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入 ...

  8. 生产环境CPU飙高问题解决,记一次完整解决过程

    一.发现问题 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值Q ...

  9. JVM中如何排查CPU飙高的问题

    1.虚拟机对象布局 布局:对象头.实例数据.对齐填充 对象头: Mark Word 8字节,hashcode值.GC分代信息.偏向锁信息:                       Class Po ...

最新文章

  1. 搭建lamp环境QA
  2. 使用window.performance分析web前端性能
  3. ReSIProcate环境搭建
  4. java ee无法安装_为什么要导入javax.servlet。*; 安装Java EE仍无法解决 面向Java EE开发人员的Eclipse...
  5. gis里怎么把两个不同坐标系的图叠在一起_坐标系那些事儿
  6. list 泛型_带你深挖Java泛型类型擦除以及类型擦除带来的问题
  7. 基于以太坊的去中心化存储协议Swarm计划在2季度发布1.0版
  8. 教你使用 IDE/Maven 快速部署 Serverless 应用
  9. mysql 1539_MySQL:半同步(三)从库端初始化和回调函数
  10. Win10技巧:如何确定电脑是否适用Hyper-V虚拟机?
  11. 国外大牛开发者创造出Siri第三方服务器
  12. 如何将符号保存到php数据库当中并且打印出来!
  13. Pubg九月十六日服务器维护,绝地求生9月16日更新维护到几点?绝地求生9月16日更新时间公告...
  14. Web--html认识、标签、基本结构
  15. 一起用Python做个自动化短视频生成脚本,实现热门视频流水线生产!
  16. 【electron】应用在线升级
  17. 计算机视觉的相关会议,计算机视觉相关会议
  18. 前端——html——html图像
  19. 3D角色模型很难做?Maya、Zbrush人头建模终极秘笈
  20. 老公,我们现在无家可归了

热门文章

  1. 公共平台API鉴权安全验证
  2. 杂谈 跟编程无关的事情20
  3. AI智能电话机器人小白使用搭建教程
  4. win7_32位安装python及pycharm
  5. android 颜色值
  6. linux 文件inode,详解Linux Inode
  7. 年轻——(美)乌尔曼
  8. 开源网安三款产品入选中国信通院首批《软件供应链厂商和产品名录》
  9. 关于税务筹划的47个提醒!务必收藏!
  10. COMFORT 美酒 | 人头马一开 我们耀精彩