ARMS Node.js 探针在运行时增加可观测的监控能力,从而实现应用性能管理,这不可避免地带来一定的应用性能开销。本报告模拟真实使用场景,测试了 ARMS Node.js 探针在不同业务流量下引入的性能开销。接入 ARMS Node.js 应用监控前,可参考本报告充分评估性能影响。
测试场景
整体架构如下图所示:
Node.js 应用基于 Express 框架编写,根据压测源发起的不同请求,会分别访问 MySQL 和 Redis 服务,两种请求各占 50% 的 QPS。
测试环境
压测源由阿里云性能测试服务 PTS 提供。
Node.js 应用部署于阿里云容器服务 ACK Pro 集群,节点实例类型为 ecs.c7.2xlarge(8 vCPU、16 GiB),节点的操作系统版本为 Alibaba Cloud Linux 3。
Node.js 应用的 Pod 规格为 2 核 2 GiB,4 个副本。
后端依赖为云数据库 RDS MySQL 和云数据库 Redis,均通过 VPC 内网访问。
Node.js 探针采用
@loongsuite/cms_node_sdk1.0.8 版本,通过--import方式加载。
测试流程
不安装 ARMS Node.js 探针,分别使用 500、1000、2000 QPS 三个档位各发起一轮压测,每轮压测持续 3 分钟,压测结果作为基线性能指标。
安装 Node.js 探针,将采样策略设置为 10% 固定采样率,重复第 1 步的压测,对比 Node.js 应用在 CPU 开销、内存开销、RT 上的差异。
安装 Node.js 探针,将采样策略设置为 100% 固定采样率,重复第 1 步的压测,对比 Node.js 应用在 CPU 开销、内存开销、RT 上的差异。
本次压测中,ARMS Node.js 应用监控的基本功能均已开启,包括统计指标、调用链等,并开启所有插件功能。
测试结果
压测分别在 500、1000、2000 QPS 三个档位下进行,以下依次给出未安装探针时的基线性能指标、安装 ARMS Node.js 探针后的性能指标,以及探针相对基线引入的性能开销。
基线性能指标
对比项 | CPU | 内存 | RT |
500 QPS | 3.5% | 2.8% | 34.4 ms |
1000 QPS | 6.3% | 2.9% | 34.7 ms |
2000 QPS | 12.7% | 3.2% | 36.6 ms |
CPU 指标代表 Pod 使用的 CPU 占总 CPU 的百分比。
内存指标代表 Pod 使用的内存占总内存的百分比。
RT 指标代表请求的平均响应时间,单位:毫秒。
安装 ARMS Node.js 探针后的性能指标
对比项 | 10% 采样率 CPU | 10% 采样率 内存 | 10% 采样率 RT | 100% 采样率 CPU | 100% 采样率 内存 | 100% 采样率 RT |
500 QPS | 6.1% | 5.2% | 34.8 ms | 8.5% | 5.6% | 36.1 ms |
1000 QPS | 10.9% | 5.4% | 35.8 ms | 15.5% | 5.5% | 38.6 ms |
2000 QPS | 18.6% | 5.1% | 38.5 ms | 27.8% | 6.1% | 42.0 ms |
探针性能开销
下表中的数值为安装 ARMS Node.js 探针后各指标与同一 QPS 档位基线性能指标的差值。
对比项 | 10% 采样率 CPU | 10% 采样率 内存 | 10% 采样率 RT | 100% 采样率 CPU | 100% 采样率 内存 | 100% 采样率 RT |
500 QPS | +2.6% | +2.4% | +0.4 ms | +5.0% | +2.8% | +1.7 ms |
1000 QPS | +4.6% | +2.5% | +1.1 ms | +9.2% | +2.6% | +3.9 ms |
2000 QPS | +5.9% | +1.9% | +1.9 ms | +15.1% | +2.9% | +5.4 ms |
分析结论
基于本文描述的测试环境与负载模型,测试结论如下:
在 10% 固定采样率下,ARMS Node.js 探针额外造成的 CPU 开销在 5.9% 以内,内存开销在 2.5% 以内。
在 100% 固定采样率下,ARMS Node.js 探针额外造成的 CPU 开销在 15.1% 以内,内存开销在 2.9% 以内。
ARMS Node.js 探针对 RT(请求响应时间)的影响较小。在 2000 QPS 下,10% 固定采样率增加 1.9 ms,100% 固定采样率增加 5.4 ms。