如何在JMeter中测量Docker容器CPU、内存并对比Alpine与非Alpine镜像性能
基于JMeter实现Docker容器CPU/内存指标采集与镜像性能对比方案
前置准备
- 已部署JMeter 5.4+版本环境,避免插件兼容性问题
- 测试机器可访问Docker宿主机的API或SSH端口,目标镜像可正常启动提供服务
- Alpine版、非Alpine版测试镜像的启动参数、端口映射、服务配置、初始化逻辑完全对齐,排除无关变量干扰
第一步:配置JMeter采集Docker容器指标
提供两种常用实现方式,可根据自身环境选择:
方式1:Docker REST API采集(推荐,性能损耗更低)
- 先在Docker宿主机开启API监听:修改docker服务配置文件,添加2375端口监听(仅测试环境使用,生产环境需加认证),重启docker服务后执行
curl http://<宿主机IP>:2375/containers/<目标容器ID>/stats?stream=false验证,正常会返回包含CPU、内存数据的JSON结果 - 回到JMeter添加HTTP请求采样器,请求方法选GET,URL填入上述验证用的接口地址
- 给HTTP采样器添加JSON提取器,分别提取需要的指标:
- CPU使用率:JSON路径表达式填
$.cpu_stats.cpu_usage.percent,提取结果存入自定义变量如container_cpu_usage - 内存使用率:JSON路径表达式填
$.memory_stats.usage_percent,提取结果存入自定义变量如container_mem_usage
- CPU使用率:JSON路径表达式填
方式2:SSH执行docker命令采集(无需修改docker配置)
- 给JMeter安装SSH Sampler插件,添加SSH Command采样器,配置宿主机SSH账号密码
- 采样器内执行命令:
docker stats <目标容器名/容器ID> --no-stream --format "{{.CPUPerc}} {{.MemPerc}}",该命令会直接返回不带动态流的资源占用数据 - 给SSH采样器添加正则表达式提取器,把返回结果里的CPU、内存数值提取出来存入自定义变量即可
第二步:压测执行规则(保证数据可对比)
- 两类镜像的压测参数完全一致:并发数、ramp-up时间、压测时长、业务请求逻辑完全相同
- 每类镜像至少执行3次重复测试,去掉最高、最低异常值后取平均值,排除偶然误差
- 压测全程宿主机不运行其他无关进程,避免额外占用资源影响测试结果
第三步:两类镜像性能对比方案
- 压测过程中用JMeter的简单数据写入器把业务指标(TPS、响应时间)和采集到的容器CPU、内存指标一起写入CSV文件
- 核心对比维度参考:
- 相同并发请求下,两类镜像的平均CPU使用率、CPU峰值
- 相同请求量下,两类镜像的平均内存占用、内存波动范围
- 满负载长时间压测下,两类镜像的内存走势,判断是否存在资源泄露问题
- 相同资源占用率下,两类镜像承载的业务TPS、响应时间差异,判断资源利用率高低
- 可把CSV导出的数据生成对比柱状图、折线图,性能差异会更直观
内容的提问来源于stack exchange,提问作者ejakub
相关产品推荐
相关产品推荐

