Arthas实践使用

news2024/11/16 7:21:44

1.启动

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

按下前面对应的数字,即可成功启动

2.用途

  1. 实时监控:Arthas 可以实时监控 Java 应用程序的各种指标和状态,例如方法执行时间、线程情况、内存使用情况等。这使得开发人员能够深入了解应用程序的运行状况,并及时发现潜在的性能瓶颈和异常情况。

  2. 诊断问题:Arthas 提供了一系列的命令和工具,可以帮助开发人员诊断和分析应用程序中的问题。例如,它可以查看方法调用栈、查找资源泄漏、分析线程问题等。这有助于快速定位和解决应用程序的 bug 和性能问题。

  3. 动态修改代码:Arthas 具备动态修改 Java 代码的能力,开发人员可以在运行时修改已加载的类和方法,而无需重新编译和部署应用程序。这对于快速调试和排查问题非常有用。

  4. 命令行交互和可视化界面:Arthas 提供了命令行交互界面,开发人员可以通过命令行输入指令进行操作和查询。此外,Arthas 还提供了可视化界面(Arthas Web Console),方便开发人员在浏览器中查看和分析应用程序的运行数据。

3.自己常用的命令

3.1 watch

        可以通过这个命令监视某个方法的调用情况,并在方法被调用时实时显示方法参数和返回信息,通过编写 OGNL 表达式进行对应变量的查看。

        可以通过命令观察入参以及返回值

arthas@1]$ watch com.aurora.controller.CommentController listTopSixComments "{params,returnObj}" 
Press Q or Ctrl+C to abort.
Affect(class count: 2 , method count: 2) cost in 446 ms, listenerId: 1
method=com.aurora.controller.CommentController.listTopSixComments location=AtExit
ts=2023-06-17 08:23:36; [cost=73.790329ms] result=@ArrayList[
    @Object[][isEmpty=true;size=0],
    @ResultVO[ResultVO(flag=true, code=20000, message=操作成功, data=[CommentDTO(id=1032, userId=1024, nickname=木木夕, avatar=http://mumuxibucket.oss-cn-beijing.aliyuncs.com/aurora/avatar/e248edca7ebfac088b85d96fa3813ebc.png, webSite=null, commentContent=hello, createTime=2023-05-31T10:22:20, replyDTOs=null)])],
]

可以加上条件过滤

watch com.aurora.controller.CommentController listTopSixComments "{params,returnObj}" "params[0]=false"

还可以观察是否出现异常

watch com.aurora.controller.CommentController listTopSixComments "{params,throwExp}" -e -x 2

其他的一些参数

参数名称参数说明
class-pattern类名表达式匹配
method-pattern函数名表达式匹配
express观察表达式,默认值:{params, target, returnObj}
condition-express条件表达式
[b]函数调用之前观察
[e]函数异常之后观察
[s]函数返回之后观察
[f]函数结束之后(正常返回和异常返回)观察
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1,最大值是 4
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]

3.2 trace

        一般用来查看方法路径上某个节点的耗时,可以进一步定位影响接口速度的方法。

[arthas@1]$ trace com.aurora.controller.CommentController listTopSixComments 
Press Q or Ctrl+C to abort.
Affect(class count: 2 , method count: 2) cost in 166 ms, listenerId: 5
`---ts=2023-06-17 08:33:48;thread_name=http-nio-8080-exec-5;id=26;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@7c214cc0
    `---[8.683509ms] com.aurora.controller.CommentController$$EnhancerBySpringCGLIB$$2f90009d:listTopSixComments()
        `---[98.89% 8.587255ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
            `---[99.15% 8.514127ms ] com.aurora.controller.CommentController:listTopSixComments()
                +---[98.96% 8.425924ms ] com.aurora.service.CommentService:listTopSixComments() #52
                `---[0.14% 0.012228ms ] com.aurora.model.vo.ResultVO:ok() #52

3.3 jad

        反编译指定已加载类的源码,可以用来观察新上线的代码是否生效

jad com.aurora.controller.CommentController

3.4 thread

        关于thread命令,因为公司业务原因依赖于线程池的使用,以及线程用量较多,偶尔需要观察下线程的一些状态

  1. thread -all 展示全部线程
  2. thread -all | grep 't-' 根据字符串过滤
  3. thread -all | grep 't-' | wc -l  根据字符串过滤,统计数量
  1. 统计命令执行后的行数或者统计目录下文件数目(wc)
wc命令

常见参数如下:

-c 统计字节数。

-l 统计行数。

-m 统计字符数。这个标志不能与 -c 标志一起使用。

-w 统计字数。注意,这里的字指的是由空格,换行符等分隔的字符串。

例子:thread -all | grep 't-' | wc -l

关于线程出现CPU打满的问题的排查思路:

1个pod CPU打满与所有pod CPU打满应对策略与应对难度是不一样的,

1、第一考虑要素是止损,先将这个pod下线,
对于这个业务是数据异步处理对于时效性要求不高,可以等看是否能自动恢复,如果持续出现线程池打满可以考虑将这个pod下线,保留现场,不要重启pod,
2、任务量是否有没有变化
3、任务量没变化,是否有任务耗时比较多占用线程时间较长,例如:大租户集中发货等,
4、是否有线程阻塞,一直无法释放

可以先使用 ps、top等命令分析线程状态。

(1)使用 top 命令找到最耗CPU的线程ID :

        top –Hp PID

(2)将最耗CPU的线程ID转成16进制,因为线程快照文件中的线程编号是以16进制记录的:

        printf ‘%x \n’ PID

(3)将有问题的服务器下线,接着使用 jstack 导出线程快照信息,查看第(2)步中找出的线程ID正在进行什么操作:

        jstack pid |grep tid -A 30

可以通过jstack pid把全部线程信息打印出来,分析其中WAITING线程以及出现阻塞的地方

3.5 profiler

        火焰图分析

 
图中颜色代表
        绿色:Java代码
        黄色:JVM,C++代码
        红色:用户态,C代码
        橙色:内核态,C代码
图中x-y轴代表
        y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

        x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
栈宽含义(CPU时间)
宽度可以理解为CPU采样率的占比,越宽代表当前栈在采样数中占比高,当一个函数x轴越宽代表:
        该函数运行时间长
        该函数被调用次数多
平顶现象(一定要格外注意)
        平顶现象是由于当前程序的采样数在总采样数中占用过高导致的,出现这种现象需要特意关注一下程序具体的调用栈,采样比例占用率过高,即代表方法在CPU中的占用率过高

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

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

相关文章

《三》TypeScript 中函数的类型定义

TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义&#xff1a;function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…

Studio one6要钱吗?新增了哪些功能

Studio One是Pre sounds公司首次研究开发宿主软件的成果。Studio One在其研发环节就吸取了市面上其他宿主软件的优缺点并且做了专业的调研整改。将其他宿主软件的优点经过改良融合在一起&#xff0c;将不足之处进行舍弃或者优化。 Studio One 6是一款强大的音乐编曲软件,可以帮…

【雕爷学编程】Arduino动手做(113)---5110液晶屏模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

6.1面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

LC-1494. 并行课程 II(状压DP)

1494. 并行课程 II 难度困难116 给你一个整数 n 表示某所大学里课程的数目&#xff0c;编号为 1 到 n &#xff0c;数组 relations 中&#xff0c; relations[i] [xi, yi] 表示一个先修课的关系&#xff0c;也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在…

SSR渲染--01--初识Nuxt

SSR服务端渲染 SSR服务端渲染&#xff1a;在后端将html页面处理好&#xff0c;前端直接展示&#xff08;可以解决为后端给你传了一个html脚本&#xff0c;全段渲染&#xff09; 为什么要有SSR服务端渲染&#xff1f; 可以解决单页面首屏加载慢的问题&#xff0c;同时有利于用…

JUC之可见性和有序性

目录 java内存模型 可见性 现象出现 现象解释 解决方法 有序性 诡异的结果 解决方法 Happens-before规则 java内存模型 Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;定义了Java程序中各种变量、对象的访问方式和内存关系。JMM规定了线…

小程序-uniapp:uni-app-base 项目基础配置及使用,开箱可用

目前&#xff08;20230605&#xff09;uni-app最新版本&#xff08;3.8.4.20230531&#xff09; 一、官网文档 uni-app官网 二、创建项目 项目目标&#xff1a;vue3tsvitevscode 创建以 typescript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下…

consul入门案例及配置热更新的实现及Feign的使用

Consul的简单入门 当Producer启动时,会向Consul发送一个post请求,告诉Consul自己的ip和Port;Consul接收到producer的注册后,每个10S(默认),会向producer发送一个健康检查的请求,检验Producer是否健康当Consumer发送GET方式请求/api/address到Producer时,会先从Consul中拿到一个…

Linux常用命令——gdb命令

在线Linux命令查询工具 gdb 功能强大的程序调试器 补充说明 gdb命令包含在GNU的gcc开发套件中&#xff0c;是功能强大的程序调试器。GDB中的命令固然很多&#xff0c;但我们只需掌握其中十个左右的命令&#xff0c;就大致可以完成日常的基本的程序调试工作。 语法 gdb(选…

DeepFace:人脸识别库 DeepFace 简单认知

写在前面 工作中遇到&#xff0c;简单整理博文内容为 deepface 的简单介绍理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是…

HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)

JS FA&#xff08;Feature Ability&#xff09;调用PA &#xff08;Particle Ability&#xff09;是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制&#xff0c;用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道…

代码审计——目录遍历详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 目录遍历&#xff0c;即利用路径回溯符“../”跳出程序本身的限制目录实现下载任意文件。 例如Web应用源码目录、Web应用配置…

FastDeploy部署参考

一、FastDeploy的gitee地址 https://gitee.com/leiqing1/FastDeploy/blob/release/0.3.0/docs/cn/faq/use_sdk_on_windows.md#21-%E4%B8%8B%E8%BD%BD%E9%A2%84%E7%BC%96%E8%AF%91%E5%BA%93%E6%88%96%E8%80%85%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%9C%80%E6%96%B0%…

When viruses are good for you 病毒,有时对人体是有益的 | 经济学人20230506版社论双语精翻

本篇来自《经济学人》&#xff08;The Economist&#xff09;2023年5月6日社论&#xff08;Leaders&#xff09;精选&#xff1a;《病毒&#xff0c;有时对人体是有益的》&#xff08;When viruses are good for you&#xff09;。 Bacteriophages 噬菌体 When viruses are goo…

onlyoffice变量提取,处理各种办公文档

onlyoffice变量提取,处理各种办公文档 使用 ONLYOFFICE Docs 在 HumHub 中处理各种办公文档。 带有 HumHub 连接器的 ONLYOFFICE Docs 企业版允许您在灵活的开源社交网络工具包 HumHub 中实时协作查看和编辑办公文档(Word、Excel 或 PowerPoint)。它包括 ONLYOFFICE Docs&#…

代码审计——SQL注入详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 当应用程序将用户输入的内容&#xff0c;拼接到SQL语句中&#xff0c;一起提交给数据库执行时&#xff0c;就会产生SQL注入威…

代码随想录训练营Day60|84. 柱状图中最大的矩形

84. 柱状图中最大的矩形 class Solution {public int largestRectangleArea(int[] heights) {int res0;// 数组扩容&#xff0c;在头和尾各加入一个元素int [] newHeights new int[heights.length 2];newHeights[0] 0;newHeights[newHeights.length - 1] 0;for (int index…

Docker desktop 怎么切换docker源

点击setting&#xff0c;点击docker Engine 进行编辑 {"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://4jup2u41.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn&q…

校园预付费管理系统与水电计量设备仪表的实际应用 安科瑞 许敏

摘要&#xff1a;论文设计了适用于学生公寓的自助式预付费控电控水管理系统&#xff0c;采用多种智能功能&#xff0c;可以监测和显示漏电现象&#xff0c;通过短路、跳线、零线接地等方式防范和记录用户的偷电行为&#xff0c;通过报警和拉闸防止事故的发生。该系统采用先进的…