案例介绍:使用 A-Ops 性能热点火焰图进行性能诊断
上篇文章A-Ops 性能火焰图——适用于云原生的全栈持续性能监测工具分享了 A-Ops 性能火焰图的特性。
本文将分享基于 A-Ops 性能热点火焰图进行性能诊断的 2 个实际案例,介绍如何使用火焰图快速定位系统或者应用的性能问题,加深大家对 A-Ops 火焰图特性的理解。
案例 1
云原生场景下 Java 类应用性能问题诊断
1. 场景及案例介绍
某 Kafka producer 客户端 Java 应用版本升级后性能出现下降,性能从 222W TPS 下降到 65W TPS,吞吐量从 337MB/s 下降到 95.9MB/s,如下图所示(为了便于比较,在不同 POD 里同时启动升级前后的两个应用):
可见,Kafka 客户端应用的性能出现了明显的下降,但此时 Kafka 服务端较轻载,CPU 0.7%,内存 16.8%,说明性能劣化是由于客户端应用的问题导致。Kafka 服务端资源情况如下:
2. 性能问题诊断
通过升级前后的火焰图比较可以看出,升级后的 CPU 性能主要消耗在字符串 format 处理函数上。对于 Kafka 生成端应用,一般存在大量字符串操作,而字符串处理函数 format 性能较低,与 StringBuilder 方法相比有几倍甚至几十倍的性能差距,可见字符串 format 函数是导致性能降低的主要原因。
案例 2
CPU 抖动类性能故障诊断案例
1. 场景及案例介绍
在生产环境中经常会遇到一些偶发性的 CPU 抖动问题,这会对应用的性能造成一定的影响,但由于没有必然的规律,故障发现及问题定位比较难。
2. 性能问题诊断
为了模拟上述偶发性的故障,我们通过 iperf 打流注入 2 分钟的故障,然后从多个角度分析故障注入前后火焰图的数据,进而对 CPU 抖动类性能故障进行诊断。
在 10:36-10:38 通过 iperf3 注入 2 分钟的流量,命令如下:
流量注入前后,系统应用指标及火焰图如下图所示:
从上图可见,流量注入期间,CPU 使用率从平均 22%升高到 33%,应用性能从 232w tps 下降到 215w tps,火焰图中 iperf3 进程对 CPU 的占用为 8.96%。
我们可以通过火焰图比较视图进一步分析这个问题,下图左边的火焰图是注入故障前的火焰图,右边为注入故障期间的火焰图,对比可以看到故障注入期间多个 iperf3 这个进程。
另外,我们还可以通过火焰图 diff 视图来分析这个问题,参考下图,火焰图红色部分为故障注入期间新增加的进程,进而可以定位到 iperf3 是造成这次 CPU 抖动以及应用性能劣化的根因。
通过 A-Ops 性能热点火焰图,开发者和维护者可以很方便地预测潜在问题和定位已发生问题。
安装 A-Ops 性能热点火焰图
gala-ops 是针对云基础设施灰度故障的应用级/系统级在线诊断工具,火焰图探针 stackprobe 集成在其中的 gala-gopher 组件内,用户只需一键安装 gala-gopher 后,在配置文件中开启或关闭火焰图探针即可使用。
A-Ops 安装部署手册:
https://gitee.com/Vchanger/a-ops-tools#a-ops-tools
gala-gophe 组件安装部署说明:
https://gitee.com/openeuler/gala-gopher
欢迎大家使用 A-Ops 性能热点火焰图,也欢迎大家交流和反馈意见
评论