多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Siege 容器化压测实战:使用 Docker 构建并运行 Siege 负载测试工具

Siege 容器化压测实战:使用 Docker 构建并运行 Siege 负载测试工具 性能测试【免费下载链接】siegeSiege is an http load tester and benchmarking utility项目地址https://gitcode.com/gh_mirrors/si/siege点击查看免费下载导读本指南以仓库中的 Dockerfile.md 与 Dockerfile 为主体系统讲解如何将开源 HTTP 负载测试与基准测试工具 Siege 打包进 Docker 镜像并借助容器对 nginx 等目标服务发起并发压测。读完本文你将掌握完整的镜像构建流程、docker run压测命令的每个参数含义以及 Siege 并发、计时、静默模式在源码层面的实现机制可直接上手一套容器化压测方案。一、容器化思路为什么把 Siege 装进镜像Siege 是一个用于 HTTP 回归测试与基准测试的命令行工具本仓库当前源码版本为 4.2.1见 src/version.c。它依赖autoconf/automake构建体系并涉及 zlib、OpenSSL 等底层库直接在宿主机上从源码编译存在环境依赖问题。Dockerfile 的多阶段构建方案把编译环境与运行环境彻底分离编译阶段builder安装全套构建工具链完成下载源码、bootstrap、configure、make、make install运行阶段仅拷贝/usr/local/下已安装好的二进制与库文件得到一个体积精简、行为可控的 siege 镜像。这样的好处是压测环境可复现、可版本化团队内任意机器上docker run -it siege ...即可获得一致的压测工具无需在每台机器上重复编译。二、Dockerfile 深度解析多阶段构建的关键细节仓库根目录的 Dockerfile 结构清晰分为两个阶段ARG OS_VER20.04 ARG OS_IMAGEubuntu # build stage FROM ${OS_IMAGE}:${OS_VER} AS builder ENV DEBIAN_FRONTEND noninteractive RUN apt-get update \ apt-get install -y \ git \ build-essential \ autoconf automake autotools-dev \ zlib1g-dev \ apt-get clean \ rm -rf /var/lib/apt/lists ARG SIEGE_VERv4.1.5 ARG SIEGE_REPOhttps://github.com/JoeDog/siege.git WORKDIR /tmp RUN git clone $SIEGE_REPO siege \ cd siege \ git checkout $SIEGE_VER \ utils/bootstrap \ ./configure \ make \ make install # run stage FROM ${OS_IMAGE}:${OS_VER} COPY --frombuilder /usr/local/ /usr/local/ RUN echo /usr/local/lib64 /etc/ld.so.conf.d/all-libs.conf ldconfig ENTRYPOINT [siege]各步骤要点基础镜像可覆盖ARG OS_VER默认值为20.04Dockerfile.md 中描述镜像基于 ubuntu 22.04 构建——若需 22.04可在构建时通过--build-arg OS_VER22.04显式指定两者均可工作。构建依赖git用于拉取源码build-essential提供 gcc/makeautoconf automake autotools-dev是 Siege 源码包所依赖的 autotools 构建体系zlib1g-dev提供压缩支持。DEBIAN_FRONTENDnoninteractive避免 apt 交互卡住构建。源码安装流程克隆上游 JoeDog/siege 仓库后git checkout v4.1.5固定版本再依次执行 utils/bootstrap生成 configure 脚本、./configure、make、make install——这正是 Siege 传统源码安装的标准链路。注意仓库当前源码已演进到 4.2.1Dockerfile 锁定的 4.1.5 是构建期固定版本可通过修改SIEGE_VER参数更新。运行阶段瘦身COPY --frombuilder /usr/local/ /usr/local/把安装产物整体拷入运行镜像随后把/usr/local/lib64写入 ld 配置并执行ldconfig确保 siege 运行时能正确加载其动态库。ENTRYPOINT设置为siege后镜像直接作为 siege 命令使用docker run -it siege -c 100 ...等价于在容器内执行siege -c 100 ...这也是文档中所有用法命令无需写全路径的原因。三、如何构建镜像在已克隆本仓库含 Dockerfile 与 utils/bootstrap的目录下执行cd siege docker build -t siege .-t siege将镜像命名为siege也可换成siege:4.1.5等带标签的名称构建过程会先走 builder 阶段完成 autotools 编译再进入运行阶段生成最终镜像若需覆盖基础镜像版本可追加--build-arg OS_VER22.04构建产物验证docker images | grep siege可查看生成的镜像。四、如何运行对 nginx 发起压测Dockerfile.md 给出了完整的端到端示例分三步1. 启动被测服务nginxdocker run -d -p 8080:80 nginx:latest-d让 nginx 后台运行-p 8080:80将容器内 80 端口映射到宿主机 8080作为压测目标。2. 获取宿主机 IPifconfig [interface_name]在桥接网络下容器无法直接通过localhost访问宿主机端口需要获取宿主机的局域网 IP如eth0的 inet 地址作为压测 URL 的 host。将[interface_name]替换为实际网卡名如eth0、enp0s3也可用ip addr代替。3. 用 siege 容器发起压测docker run -it siege -c 100 -t 60S -q http://ip:8080命令逐段拆解片段含义docker run -it交互式前台运行便于实时观察输出siege即镜像名同时触发ENTRYPOINT [siege]-c 100模拟 100 个并发用户-t 60S压测持续 60 秒-qquiet 静默模式只输出最终统计不逐请求刷屏http://ip:8080压测目标 URL单 URL 直连模式4. 查看帮助docker run -it siege --help由于ENTRYPOINT已固定为siege--help会直接透传给 siege 本体输出全部命令行选项是容器内排查参数最快捷的方式。五、核心参数源码级讲解上述压测命令用到的-c、-t、-q以及--help均定义在 src/main.c 的long_options数组中-c/--concurrent、-t/--time、-q/--quiet、-h/--help对应配置字段保存在 src/setup.h 的struct CONFIG如cusers、time、quiet。-c NUM/--concurrentNUM并发用户数含义同时发起请求的并发用户数总用户数理论上受宿主机资源限制默认上限siege 配置默认将并发用户上限封顶为 255原因在于常见 Web 服务器默认线程上限即 255若-c 1024其中约 769 个 siege 用户将排队等待服务器 handler详见 doc/siege.pod 对-c的说明建议并发数应不超过被测服务器的处理能力压测前先确认 nginx 等服务的 worker 配置。-t NUMm/--timeNUMm压测时长与-r/--reps每用户迭代次数二选一-t按时间控制压测长度时间格式为NUMmNUM为数值m为修饰符S秒、M分钟、H小时不区分大小写数值与修饰符之间不能有空格同一时长可等价表达跑 1 小时可用-t3600S、-t60M或-t1Hdoc/siege.pod 中的示例文档中的-t 60S即持续 60 秒。-q/--quiet静默模式关闭除最终统计以外的屏幕输出适合在持续集成或脚本中只关心结果摘要的场景与之相对的-v/--verbose会逐请求打印详细信息-b/--benchmark则进入无请求间隔的基准测试模式。其他常用选项速查均可在--help中确认选项作用-r NUM/--repsNUM每个用户迭代 NUM 次once表示每个用户跑完整个 urls.txt-f FILE/--fileFILE从文件加载 URL 列表每行一个支持注释与变量$需转义-i/--internet随机顺序访问 urls.txt 中的 URLinternet 模式-d NUM/--delayNUM请求间延迟秒数支持小数默认 0.5 秒-A str/--agentstr自定义 User-Agent-H h: v/--headerh: v追加/覆盖请求头-j/--json-output以 JSON 格式输出统计结果六、运行原理与结果解读压测结束后siege 会输出事务速率、平均响应时间、成功率、吞吐量等统计。若配合-bbenchmark模式请求之间无延迟可测量服务器真实吞吐上限若使用-f urls.txt加-i可模拟更接近真实互联网的随机访问模式。在容器场景下有几个实用技巧挂载 URL 列表docker run -it -v $(pwd)/urls.txt:/tmp/urls.txt siege -i -f /tmp/urls.txt可把仓库 doc/urls.txt 这样的清单带入容器批量压测持久化日志Siege 默认日志位于$prefix/var/log/siege.log可通过-L FILE指定日志路径并挂载卷保存压测记录静默 JSONdocker run -it siege -q -j -t 60S http://ip:8080输出机器可读的 JSON 统计便于接入监控或 CI 断言。七、注意事项与边界镜像版本当前仓库源码为 4.2.1而 Dockerfile 构建期锁定v4.1.5如需使用新版可修改SIEGE_VER参数后重新构建基础镜像Dockerfile 默认OS_VER20.04Dockerfile.md 描述为 ubuntu 22.04两者均可通过--build-arg切换网络模式默认桥接网络下容器访问宿主机需使用宿主机 IP而非localhost如需反向访问容器内服务可改用--network host或配置端口映射并发上限-c值受服务器处理能力与默认 255 上限约束过高的并发可能导致大量连接排队压测结果失真。结语通过 Dockerfile.md 与 Dockerfile 提供的容器化方案Siege 从需要 autotools 现场编译的命令行工具变成了一条docker run即可调用的压测命令。结合 src/main.c 中的参数定义、src/setup.h 的配置结构以及 doc/siege.pod 的完整选项手册你可以精确控制并发、时长与输出格式快速搭建可复现的 HTTP 负载测试环境。赞分享性能测试【免费下载链接】siegeSiege is an http load tester and benchmarking utility项目地址https://gitcode.com/gh_mirrors/si/siege点击查看免费下载相关推荐Siege与Docker容器化部署和测试环境搭建终极指南Siege与Docker容器化部署和测试环境搭建终极指南 Siege是一款强大的HTTP负载测试和基准测试工具能够模拟大量用户同时访问网站帮助开发者和系统性能测试3分钟掌握国家中小学智慧教育平台电子课本下载终极指南3分钟掌握国家中小学智慧教育平台电子课本下载终极指南 还在为获取优质教育资源而烦恼吗今天我要向您介绍一款真正实用的电子课本下载工具它能帮助您轻松从国家中小网页爬虫教育Open Headunit WiFi Direct 管理实战防止重复建组与清理陈旧 Group 的完整指南Open Headunit WiFi Direct 管理实战防止重复建组与清理陈旧 Group 的完整指南 Open Headunit 是一款把安卓平板变成音视频上一篇重新定义老旧电视体验MyTV-Android的现代化重构方案下一篇howdoi新手完整指南如何用一句自然语言获取StackOverflow高分答案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表