news 2026/4/18 8:52:53

使用arthas生成火焰图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用arthas生成火焰图

下载arthas

https://arthas.aliyun.com/

#下载包 curl -O https://arthas.aliyun.com/arthas-boot.jar

挂载目录

#添加ksb-recycle挂载本地/opt/bin目录 vim docker-compose-app.yml

重启ksb-recycle服务

#重启ksb-recycle服务 docker-compose -f docker-compose-app.yml restart ksb-recycle #进入ksb-recycle容器内 docker-compose -f docker-compose-app.yml exec ksb-recycle /bin/bash

查看到本地的arthas包和脚本已经挂载到容器内

show-busy-java-threads脚本定位Java进程中高CPU占用线程并打印其堆栈信息的工具

# 1. 基础用法:显示所有Java进程中Top 5高CPU线程的堆栈 ./show-busy-java-threads # 2. 指定Java PID:只排查PID为12345的Java进程 ./show-busy-java-threads -p 12345 # 3. 显示Top 10高CPU线程,持续监控(每2秒刷新,共5次) ./show-busy-java-threads -c 10 2 5 # 4. 进程卡死时,强制抓取堆栈(加-F参数) ./show-busy-java-threads -p 12345 -F # 5. 保存结果到日志文件,方便后续分析 ./show-busy-java-threads -a /tmp/java_cpu_high.log

tcp-connection-state-counter脚本统计TCP连接各状态的数量并排序输出

./tcp-connection-state-counter ESTABLISHED 128 # 已建立的活跃连接(数量最多) TIME_WAIT 45 # 等待关闭的连接 CLOSE_WAIT 12 # 被动关闭后未释放的连接 LISTEN 8 # 监听中的端口 SYN_RECV 3 # 收到SYN包等待建立连接 FIN_WAIT1 1 # 主动关闭等待对方确认

启动arthas

#进入ksb-recycle容器内 docker-compose -f docker-compose-app.yml exec ksb-recycle /bin/bash #启动arthas-boot.jar,输入1诊断PID为1的java进程 java -jar /opt/bin/arthas-boot.jar

常用命令

profiler

命令作用

profiler start

启动profiler,默认情况下,生成cpu的火焰图

profiler list

显示所有支持的事件

profiler getSamples

获取已采集的sample的数量

profiler status

查看profiler的状态,运行的时间

profiler stop

停止profiler,生成火焰图的结果,指定输出目录和输出格式:svg或html

profiler stop --file /pathname --format html

停止时指定输出火焰图的路径和文件格式

profiler start --event cpu --interval 10

启动CPU采样 --event 指定事件--interval 代表10 毫秒采样一次

数值越小,采样越密集、火焰图越精准,会稍微增加服务器 CPU 开销

数值越大,开销越小,适合长时间采样(比如采样 5 分钟以上可以设为 20)

profiler start --event lock --interval 10

--event lock指定采样事件为锁竞争,这是生成锁火焰图的关键参数

profiler stop --file /opt/arthas-output/cpu-profiler.html --format html

停止采样生成CPU火焰图

profiler stop --file /opt/arthas-output/profiler-lock-10-100-13-23.html --format html

停止采样生成HTML格式锁火焰图

生成后到宿主机挂载目录执行sz命令下载查看

第二种方式生成

登录Dozzle终端生成查看(更新了Dozzle镜像)

http://192.168.1.220:9999/

java -jar /opt/bin/arthas-boot.jar profiler start

profiler stop --file /opt/arthas-output/cpu-profiler.html --format html

停止采样生成CPU火焰图

profiler stop --file /opt/arthas-output/profiler-lock-10-100-13-23.html --format html

停止采样生成HTML格式锁火焰图

使用命令生成后打开链接下载所生成的

http://192.168.1.219:8188/

火焰图查看

火焰图是基于 perf 结果产生的图片用来展示CPU的调用栈。

纵轴表示调用栈每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

横轴表示抽样数,如果一个函数在横轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意横轴不代表时间

,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调

dashboard命令

NAME 线程名称

STATE 线程状态

1、RUNNABLE:正在运行(CPU高的线程通常是这个状态)

2、TIMED_WAITING:超时等待

3、WAITING:无限等待

%CPU 线程占用的 CPU 百分比(核心指标)

TIME 线程累计运行时间能看出线程的 “总工作量”

DAEMON 是否是守护线程(true表示是,JVM 退出时会自动关闭这类线程)

heap 堆内存Eden 是新对象区、Survivor 是存活对象区、old 是老年代ps_eden_space ps_survivor_space ps_old_gen

nonheap 存放类信息、常量池核心看 GC 次数和耗时这部分是 JVM 垃圾回收的统计,GC 频繁会导致性能下降

关键指标

线程区域:找 %CPU高的线程,看它的STAT是不是 RUNNABLE(如果是,说明这个线程在 疯狂干活,可能是性能瓶颈)

内存区域:看heap的 usage(超过 80% 警惕内存泄漏)、ps_old_gen 的使用率(持续涨要查老年代对象)

GC 区域:看 gc.ps_marksweep.count(Full GC 次数多不多)、gc.ps_scavenge.time(Minor GC 耗时久不久)

更多命令:https://arthas.aliyun.com/doc/commands.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:16:23

AI写教材神器来袭!低查重特性,一键生成专业教材!

编写教材的困境与AI的解决方案 在编写教材的过程中,总是能深刻感受到“慢节奏”的各类坑。尽管框架和参考资料已准备好,却总是在内容创作上遇到阻碍——某句话反复推敲半个小时,仍觉得表达不够准确;章节之间的衔接,总…

作者头像 李华
网站建设 2026/4/15 11:20:15

光伏电站气象监测仪 太阳能光伏气象站

太阳能光伏气象站 核心作用是“精准捕捉气象数据,为光伏运维、发电量预测提供可靠支撑”,直击光伏运维3大核心数据痛点!首先,解决数据不准的问题,实测这款光伏气象站精度稳得不像话,各项监测数据误差严格…

作者头像 李华
网站建设 2026/4/18 8:16:20

腾讯云高性价比GPU算力,开启AI时代

腾讯云高性价比GPU算力概述腾讯云作为国内领先的云计算服务商,提供多样化的GPU算力解决方案,覆盖从入门级训练到高性能计算的场景。其GPU实例基于NVIDIA Tesla系列显卡(如T4、V100、A100等),支持CUDA、TensorFlow、PyT…

作者头像 李华
网站建设 2026/4/17 17:46:43

Agentic RAG:智能体驱动的动态检索系统Golang实战

摘要 传统检索增强生成(RAG)系统在简单问答场景中表现出色,但在处理复杂、多步骤查询时存在显著局限。本文介绍Agentic RAG——一种智能体驱动的动态检索系统,通过查询重写、动态路由、工具调用和自我反思等能力,将传统RAG升级为具备自主决策能力的智能工作流。我们将使用…

作者头像 李华
网站建设 2026/4/16 20:01:12

插槽(Slot)的高级用法:具名插槽与作用域插槽深度解析

插槽(Slot)的高级用法:具名插槽与作用域插槽深度解析 在Vue组件化开发中,插槽机制通过解耦组件内容与结构,实现了UI的高度复用性。其中,具名插槽与作用域插槽作为核心高级特性,分别解决了多区域内容分发与数据穿透的难…

作者头像 李华