ARMS Python探针通过monkey-patching方式增加可观测的监控能力,实现应用性能管理,这不可避免地带来了一定的应用性能开销。ARMS团队采用多项技术对探针进行优化,将探针的性能开销降低,以确保应用的稳定运行。在本篇测试报告中,我们模拟了真实的使用场景,测试ARMS Python探针在不同业务流量下带来的性能开销,您可以参考本篇分析报告,在接入ARMS Python应用监控前,基于性能影响进行充分的评估。
测试场景
整体架构如下图所示:
由PTS发起流量压测,流量转发到Python应用上,Python应用为使用FastAPI框架搭建的Web Server,通过Python instrumentor采集Trace并生成Metric,之后将数据发送至ARMS服务端。
测试环境
压测源由阿里云性能测试服务PTS提供。
Python应用部署在阿里云容器服务ACK集群中,节点实例类型为ecs.c6.2xlarge,节点的操作系统版本为Alibaba Cloud Linux 3.2104 LTS 64位。
Python应用的Pod规格为2核2G,2个副本。
Python探针采用Aliyun Python Agent 1.0.0版本。
测试流程
开启数据上报,在不安装ARMS Python探针的情况下,分别使用基于500 / 1000 / 2000 QPS,发起3次压测,每次的持续时长为1小时,每次压测前都先基于100 QPS压测流量对Python应用进行3分钟预热,压测结果将作为基线性能指标。
安装ARMS Python探针,在采样策略设置为10%固定采样率的情况下,重复第1步的压测,对比Python应用在CPU开销、内存开销、RT上的差异。
关闭数据上报,开启单个插件,重复1~2步骤。
基线性能指标
对比项 | CPU | 内存 | RT |
500 QPS | 8% | 2% | 17.28 ms |
1000 QPS | 15% | 2% | 36.3 ms |
2000 QPS | 27.12% | 2% | 44.9 ms |
安装ARMS Python探针后的性能指标
对比项 | CPU | 内存 | RT |
500 QPS | 11.9% | 4.8% | 17.31 ms |
1000 QPS | 22.5% | 4.8% | 37.1 ms |
2000 QPS | 36.67% | 4.8% | 46.6 ms |
探针性能开销
对比项 | CPU | 内存 | RT |
500 QPS | +3.9% | +2.8% | +0.03 ms |
1000 QPS | +7.5% | +2.8% | +0.80 ms |
2000 QPS | +9.55% | +2.8% | +1.67 ms |
分析结论
ARMS Python探针额外造成的CPU和内存开销,都在10%以内。
ARMS Python探针对于RT(请求响应时间)的影响非常小。