本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
Loadgen是一款专为Elasticsearch或通用HTTP服务器设计的轻量级负载生成器,用于性能基准测试。它具备高并发处理能力,支持模板化参数动态生成和基准端流量控制,轻量级且无依赖,可快速部署以评估服务器在不同负载下的响应性能。
Loadgen通过YAML配置文件(默认loadgen.yml)定义测试参数,核心包含variables(变量定义)和requests(请求定义)两个节点。典型配置示例:
variables: - name: ip type: file path: test/ip.txt # 从文件加载变量 - name: user type: file path: test/user.txt - name: id type: sequence # 自增数字变量 - name: uuid type: uuid # UUID生成变量 - name: now_local type: now_local # 本地时间变量 requests: - request: method: GET basic_auth: username: elastic password: pass url: http://localhost:8000/medcl/_search body: '{ "query": {"match": { "name": "$[[user]]" }}}' # 使用变量
variables节点定义动态参数,通过name标识,在请求中使用$[[变量名]]引用。支持的变量类型说明:
| 类型 | 描述 |
|---|---|
| file | 从外部文本文件加载,每行一个值,随机选取 |
| sequence | 自增数字类型,从0开始逐次递增 |
| range | 范围数字类型,需通过from和to参数定义取值范围(如from:10, to:20) |
| uuid | 生成UUID格式字符串(如c3qj9123r0okahraiej0) |
| now_local | 当前时间(本地时区),格式YYYY-MM-DD HH:MM:SS |
| now_utc | 当前时间(UTC时区),格式YYYY-MM-DD HH:MM:SS |
| now_unix | 当前Unix时间戳(秒级) |
文件类型变量示例:
创建test/user.txt文件,每行一个值:
medcl elastic admin
请求中通过$[[user]]随机引用上述值之一。
requests节点按顺序定义待执行的HTTP请求,支持固定参数和模板化参数请求。支持的请求属性包括:
method:HTTP方法(GET/POST等)basic_auth:基础认证信息(username和password)url:请求URL(支持变量引用)body:请求体(支持变量引用)body_repeat_times:请求体重复次数(用于批量请求)查询请求示例:
requests: - request: method: GET basic_auth: username: elastic password: pass url: http://localhost:8000/medcl/_search?q=name:$[[user]] # URL中引用变量
通过命令行参数控制测试执行行为,执行loadgen --help查看完整参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| -c | int | 1 | 并发线程数 |
| -compress | bool | false | 是否启用gzip压缩请求 |
| -config | string | "loadgen.yml" | 配置文件路径(默认当前目录下的loadgen.yml) |
| -d | int | 5 | 测试持续时间(秒),默认5秒 |
| -debug | bool | false | 调试模式,发生错误时触发panic并退出 |
| -l | int | -1 | 限制总请求数(-1表示无限制) |
| -log | string | "info" | 日志级别,可选:trace, debug, info, warn, error |
| -r | int | -1 | 每秒最大请求数(固定QPS),-1表示不限制 |
| -v | bool | false | 显示版本信息 |
假设镜像名称为infinilabs/loadgen,通过以下命令运行(需挂载本地配置文件到容器内):
# 基础用法:运行30秒,100并发线程,启用gzip压缩 docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -d 30 -c 100 -compress # 限制QPS为200,日志级别debug docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -d 60 -c 50 -r 200 -log debug # 限制总请求数为10000,使用自定义配置文件 docker run -v $(pwd)/custom-config.yml:/app/custom-config.yml infinilabs/loadgen -config custom-config.yml -l 10000 -c 80
典型测试输出示例:
5253 requests in 32.756483336s, 524.61KB sent, 2.49MB received [Loadgen Client Metrics] Requests/sec: 175.10 Request Traffic/sec: 17.49KB Total Transfer/sec: 102.34KB Avg Req Time: 5.711022ms Fastest Request: 440.448µs Slowest Request: 3.624302658s Number of Errors: 0 Status 200: 5253
注意:Loadgen结果为累积统计值,可能存在一定误差。建议结合Kibana仪表板实时监控Elasticsearch的CPU、内存、IO等关键指标。
通过body_repeat_times参数复制多次请求体,生成批量请求:
requests: - request: method: POST url: http://localhost:8000/_bulk # Elasticsearch bulk API body_repeat_times: 1000 # 随机复制请求体1000次生成批量数据 body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\" }\n"
使用-l参数限制总请求数,结合单请求单文档配置,生成固定数量文档:
# 配置文件中每个请求生成1个文档,通过-l控制总数量 docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -l 50000 -c 100
使用sequence类型变量作为文档ID,实现有序增长:
variables: - name: id type: sequence # 自增数字变量(0,1,2,...) requests: - request: method: POST url: http://localhost:8000/medcl-test/_bulk body_repeat_times: 1 body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[id]]\" } }\n{ \"id\" : \"$[[id]]\" }\n" # ID与文档字段同步
通过runtime_variables(请求级共享)和runtime_body_line_variables(文档级独立)实现变量复用,如路由值与文档字段关联:
variables: - name: suffix type: range from: 10 to: 15 # 随机生成10-15的数字 requests: - request: method: POST runtime_variables: batch_no: id # 整个请求批次共享一个batch_no runtime_body_line_variables: routing_no: uuid # 每个文档独立的routing_no url: http://localhost:8000/_bulk body_repeat_times: 10 # 生成10个文档 body: "{ \"create\" : { \"_index\" : \"test-$[[suffix]]\", \"routing\" : \"$[[routing_no]]\" } }\n{ \"batch_number\" : \"$[[batch_no]]\", \"routing_no\" : \"$[[routing_no]]\" }\n"
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429