Arthas学习(1)

news2024/12/26 12:07:30

1.Arthas作用

Arthas是Alibaba开源的Java诊断工具。

作用:当遇到以下类似问题时,可以帮助我们解决:

1.这个类从哪个jar包加载的?为什么会报各种类相关的Exception?

2.我改的代码为什么没有执行到?难道是我没提交?看线上代码是不是我们修改后的?

3.遇到问题无法线上debug,难道只能通过加日志再重新发布吗?

4.线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现。

5.是否有一个全局视角来查看系统的运行状况?

6.有什么办法可以监控到JVM的实时运行状态?

7.怎么快速定位应用的热点,生成火焰图?

2.运行环境要求

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

3.快速安装和启动

下载arthas-boot.jar ,然后java -jar的方式启动

curl -O https://arthas.aliyun.com/arthas-boot.jar

java -jar arthas-boot.jar

 启动后显示在运行的java进程   输入编号  回车

快速退出某个命令:Q或者Ctrl+C
退出Arthas: exit或者quit, 退出当前session,Arthas server还在目标进程中运行。
彻底退出: stop. 用完一定要stop哦,避免Arthas server依然运行占用系统资源。

4. trace命令定位代码耗时

性能测试过程中,经常会碰到接口请求耗时长,但是又不知道具体是哪个环节哪段代码耗时长。这个时候Arthas的trace命令的作用就体现出来了,可以方便快捷从方法表层顺着调用链路一步步往下追踪,最终找出具体耗时长的代码块,是性能测试优化的神器。

举例:假设某个接口耗时长,下面介绍如何使用Arthas一步一步定位到具体是哪段代码耗时长:

通过浏览器F12查看network,找到请求URL,然后查到后端代码中的Controller

右键点击save方法复制引用 ,  得到完全的方法路径com.webber.cm.pms.controller.StoryNewController save

trace 包名类名 方法名

比如发现上图中的68.7%  耗时较长   可以继续追踪这个方法  

trace com.webber.cm.service.StoryService save 

一直这样进行下去,最后可能定位到SQL,也可能是你某一个方法。

定位到是这段SQL耗时比较长,可以针对性的优化SQL。当然上述举例是代码逻辑比较简单,所以最终反映是在SQL上耗时长。如果代码逻辑复杂,那可能定位到的就是前面某个代码方法的逻辑耗时长了,那就可以针对那个代码方法做优化。

trace默认监控次数是100次,超过100就会停止。比如针对某个接口做压测时,肯定不止一百次,需要修改次数。

trace 包名类名 方法名 -n  10000

5.Thread命令:查看线程

thread命令查看所有正在运行的线程

thread

如果发现某个线程CPU使用过高,通过thread加线程id输出该线程的栈信息:

thread id 可以查看该线程的信息

thread -n 3  查看CPU使用率top n线程的栈;

thread -b     找出当前阻塞其他线程的线程。

6.dashboard仪表板:查看当前系统的实时面板

命令:dashboard, 每5秒刷新一次面板

        输入dashboard仪表板,按回车enter,会展示当前进程的信息,按ctrl+c 可以中断执行

1.第一部分是显示JVM中运行的所有线程:所在线程组,优先级,线程的状态,CPU占用率,是否是后台进程等;

2.第二部分显示的是JVM内存的使用情况;

3.第三部分是操作系统的一些信息和Java版本号。

7.watch命令

可以通过watch命令来查看方法的入参和返回值

watch com.xxxx.xxxxController 方法名 '{params,returnObj}' -x 2 -b -s,查看xxxxController的update方法的返回值:

-x 2是指定输出结果的属性遍历深度,默认为 1
-b方法调用前观察,用于返回方法入参
-s方法调用后观察,用于返回方法返回值
watch com.webber.cm.pms.controller.StoryNewController save '{params,returnObj}' -x 2

-x 2  可以看出入参对象中的各个属性值

8.jad反编译

jad反编译class文件   

可以用来查看线上的java源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈AVL树

文章目录 1.介绍1.1定义1.2来源1.3概念1.特性2.平衡因子[ Balance Factor-- _bf ] 2.BST>AVL1.示例分析2.情况分类3.代码剖析3.1左左型-右单旋3.2右右型-左单旋3.3左右型-左右旋3.4右左型:右左旋3.5总图 3.完整代码3.1AVLTree.h3.2Test.cpp 1.介绍 1.1定义 AVL树 – 平衡二…

CVE-2020-11978 Apache Airflow 命令注入漏洞分析与利用

简介 漏洞软件&#xff1a;Apache Airflow影响版本&#xff1a;< 1.10.10 环境 Vulhub 漏洞测试靶场 复现步骤 进入 /root/vulhub/airflow/CVE-2020-11978/ 目录运行以下命令启动环境 # 初始化数据库 docker compose run airflow-init # 开启服务 docker compose up -…

字符串常量池位于JVM哪里

Java6 和6之前&#xff0c;常量池是存放在方法区&#xff08;永久代&#xff09;中的。Java7&#xff0c;将常量池是存放到了堆中。Java8 之后&#xff0c;取消了整个永久代区域&#xff0c;取而代之的是元空间。运行时常量池和静态常量池存放在元空间中&#xff0c;而字符串常…

web:[ACTF2020 新生赛]Upload

题目 点进页面&#xff0c;是一个文件上传&#xff0c;能联想到getshell 先尝试随便上传一个文件试试 显示上传的文件以jpg、png、gif结尾的图片 构造一句话木马&#xff0c;再将文件后缀改为jpg <?php eval($_POST[1234]);?> 显示上传成功&#xff0c;但是显示无法…

MySQL学习笔记24

MySQL的物理备份&#xff1a; xtrabackup备份介绍&#xff1a; xtrabackup优缺点&#xff1a; 优点&#xff1a; 1、备份过程快速、可靠&#xff08;因为是物理备份&#xff09;&#xff1b;直接拷贝物理文件。 2、支持增量备份&#xff0c;更为灵活&#xff1b; 3、备份…

【数据结构】——顺序表详解

大家好&#xff01;当我们学习了动态内存管理后&#xff0c;就可以写一个管理数据的顺序表了&#xff01;&#xff01;&#xff01; 顺序表的理解&#xff1a; 线性表是最基本、最简单、也是最常用的一种数据结构。线性表&#xff08;linear list&#xff09;是数据结构的一种…

self-attention、transformer、bert理解

参考李宏毅老师的视频 https://www.bilibili.com/video/BV1LP411b7zS?p2&spm_id_frompageDriver&vd_sourcec67a2725ac3ca01c38eb3916d221e708 一个输入&#xff0c;一个输出&#xff0c;未考虑输入之间的关系&#xff01;&#xff01;&#xff01; self-attention…

CSS详细基础(三)复合选择器

前两章介绍了CSS中的基础属性&#xff0c;以及一些基础的选择器&#xff0c;本贴开始介绍复合选择器的内容~ ​ 在 CSS 中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基本选择器进行组合形…

c语言练习70:反转两次的数字

反转两次的数字 题⽬描述&#xff1a; 反转 ⼀个整数意味着倒置它的所有位。 例如&#xff0c;反转 2021 得到 1202 。反转 12300 得到 321 &#xff0c;不保留前导零 。 给你⼀个整数 num &#xff0c;反转 num 得到 reversed1 &#xff0c;接着反转 reversed1 得到 revers…

使用KEIL自带的仿真器仿真遇到问题解决

*** error 65: access violation at 0x40021000 : no read permission 修改debug选项设置为下方内容。

Java之多线程的生产者消费者问题的详细解析

3.生产者消费者 3.1生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十分经典的多线程协作的模式&#xff0c;弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。 所谓生产者消费者问题&#xff0c;实际上主要是包含了两类线程&#xff1a; 一类是生产者…

MJ 种的摄影提示词关键字

景别 Front view photo 正面照 Front view photo of a Boston Terrier with smileSide view photo 侧身照 Side view photo of a Boston Terrier with smileBack view photo 背影照 Back view photo of a Boston TerrierFull body 全身照 Full body photo of a Boston Ter…

electron之快速上手

前一篇文章已经介绍了如何创建一个electron项目&#xff0c;没有看过的小伙伴可以去实操一下。 接下来给大家介绍一下electron项目的架构是什么样的。 electron之快速上手 electron项目一般有两个进程&#xff1a;主进程和渲染进程。 主进程&#xff1a;整个项目的唯一入口&…

2.物联网射频识别,RFID通信原理,RFID读写器与标签无线交互方式、数据反馈方式,RFID调制与解调、编码方式,不同RFID标签与读写器

一。RFID无线识别的原理 1.RFID系统无线通信基本原理 如下图所示&#xff0c;左边是读写器&#xff08;刷卡器&#xff09;&#xff0c;右边是标签&#xff08;卡&#xff09;&#xff0c;中间通过无线通信方式。 标签&#xff1a;&#xff08;卡&#xff09; 读写器&#xff…

Sound/播放提示音, Haptics/触觉反馈, LocalNotification/本地通知 的使用

1. Sound 播放提示音 1.1 音频文件: tada.mp3&#xff0c; badum.mp3 1.2 文件位置截图: 1.3 实现 import AVKit/// 音频管理器 class SoundManager{// 单例对象 Singletonstatic let instance SoundManager()// 音频播放var player: AVAudioPlayer?enum SoundOption: Stri…

python二维码识别tesseract

window安装tesseract 下载路径&#xff1a; https://digi.bib.uni-mannheim.de/tesseract/ 选择 双击安装在D:\sore\teeseract-OCR后&#xff1a; 配置环境变量 配置环境变量Path&#xff1a;D:\sore\teeseract-OCR 配置语言包的环境变量TESSDATA_PREFIX&#xff1a; D:\s…

搭建自己的搜索引擎之五

一、前言 接上文 搭建自己的搜索引擎之四&#xff0c;下面继续介绍茴香豆茴字的另外两种写法。 二、Jest Jest是ES的Java Http Rest客户端&#xff0c;它主要是为了弥补以前ES自有API缺少HttpRest接口客户端的不足&#xff0c;但因为现在ES官方已经提供了RestClient ,该项目已…

Dynamic CRM开发 - 实体窗体(二)主窗体

主窗体是功能最丰富,使用场景最多的窗体。 主窗体界面如下图: 下面按照图中的序号,简述一下窗体的主要功能: 0、窗体的主要布局部分,即用户看到的内容,可以拖动右侧的字段到窗体中想要放置的地方。 默认有标题、常规(选项卡)、页脚三部分,常规处于高亮状态,即可以…

第十二章 类和对象

C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重...&#xff0c;行为有走、跑、跳、吃饭、唱歌... 车也可以作为对象&#xff0c;…

docker安装apisix全教程包含windows和linux

docker安装apisix 一、Windows安装1、首先需要安装docker和docker compose&#xff0c;如果直接安装docker desktop&#xff0c;会自动安装docker compose。2、重新启动电脑3、访问 Docker 的下载&#xff08;[https://www.docker.com/products/docker-desktop](https://www.do…