关于 pepe
pepe 是一个带实时仪表盘的 HTTP 压测工具,可对 URL 发起请求、用 ping 观察分段延迟,并生成可用于脚本与 CI 的 JSON 报告。适合需要查看容量上限与对比测试结果的开发者和运维人员,并强调自身开销低于被测服务。
主要功能
- 01实时仪表盘显示吞吐、延迟分位与状态码
- 02pepe ping 按阶段拆解单次请求耗时
- 03ramp 模式逐级增压以寻找容量上限
- 04支持 OpenAPI、flow 与访问日志回放
- 05带护栏的 JSON 报告、退出码与 CI 集成
- 06pepe mcp 命令以工具形式提供给 agent
适用场景
- 01在发布前对接口进行压力测试并比较两次结果
- 02在 CI 中用阈值判断性能回归并在 PR 中评论
- 03用 ping 排查 URL 的 DNS、TLS 或首字节延迟问题
MCP 相关
pepe 提供 pepe mcp 命令,将压测模式作为工具暴露给 MCP 客户端或 agent,并沿用启动时设定的护栏限制。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍

pepe 向一个 URL 发送请求,数量可按需设置,并实时展示返回结果:吞吐量、延迟百分位数和热力图、状态码、按原因分类的失败,以及可打开任意请求的日志。运行结束后,它会用简单明了的语言给出结论,并说明时间花在了哪里。它可以接收 curl 命令作为输入,通过逐步增加负载找出目标何时开始跟不上,对 OpenAPI 规范中的每个端点进行负载测试,重放访问日志,还能运行一个前后步骤相互传递数据的请求流程。pepe ping 使用同一引擎,以每秒一个请求的速度运行:绘制 URL 延迟随时间变化的图表,将每次 ping 拆分为 DNS、连接、TLS、首字节和下载阶段,并指出需要关注的内容。
它也很轻量。在 Apple M4 Pro 上,单个线程每秒可发送 160k 个请求;在 Linux 上则可达 400k 个请求。与 wrk 相比,它每个请求消耗的 CPU 和内存更少;CPU 消耗仅为 oha 的四分之一到二分之一,内存消耗不超过其十分之一。pepe 还会告诉你,瓶颈是在它自身,而不是目标服务器。
安装
curl -LsSf https://pepe.mhaimdat.com/install.sh | sh # macOS and Linux
brew install omarmhaimdat/pepe/pepe # Homebrew
nix run github:omarmhaimdat/pepe -- https://example.com # Nix, without installing
docker run --rm -it ghcr.io/omarmhaimdat/pepe https://example.com
cargo install --locked --git https://github.com/omarmhaimdat/pepe
Windows 用户可在 PowerShell 中运行:powershell -ExecutionPolicy Bypass -c "irm https://pepe.mhaimdat.com/install.ps1 | iex"。每个版本还提供适用于 macOS、Linux 和 Windows 的二进制文件,以及校验和、签名来源证明、Shell 补全脚本和 man 手册页。pepe self-update 可安装最新版本;pepe 每天会检查一次新版本,并在运行结束时告知你。所有内容及详细信息请见安装页面。
快速开始
pepe https://example.com # 100 requests, one per core at a time, and watch
pepe -z 30s -c 50 -m POST -H 'Content-Type: application/json' -d '{"key":"value"}' https://httpbin.org/post
pepe -z 30s --curl -- curl 'https://api.example.com/items' -H 'Authorization: Bearer …' # from "Copy as cURL"
pepe ping https://example.com --once # three pings, then why it is slow, and out
pepe # the setup screen: every option on a form
在仪表盘中,按 space 可暂停,按 + 和 - 可更改并发数,按 tab 可切换视图,按 enter 可查看请求详情,按 ? 可列出所有按键,按 q 可退出,并在 Shell 中保留测试结论。
功能介绍
| 命令 | 用途 | 文档 |
|---|---|---|
pepe URL | 进行带实时仪表板的负载测试:负载形态(--number、--duration、--concurrency、--rate、--warmup、--threads)、任意请求头、请求正文或方法、curl 命令、与代码放在一起的 pepe.toml,以及带 --snapshot 的持续负载测试 | 负载测试、仪表板 |
pepe ping URL… | 每秒发送一个请求,并在图表中分别显示 DNS、连接、TLS、首字节和下载耗时;支持多个目标、TCP ping、--slo 限制、HTTP/2、证书到期时间,以及指出需要关注事项的诊断结果 | Ping |
pepe ramp URL | 逐步提高并发数,找出稳定运行的并发级别、吞吐量不再随并发增长的位置、系统崩溃的位置,以及容量估算值 | 阶梯测试 |
pepe api SPEC | 从 OpenAPI 3 或 Swagger 2 规范中提取端点,可在屏幕上选择或按标签筛选,并包含相应参数和凭据 | OpenAPI |
pepe flow FILE | 按顺序发送一系列请求,每一步都使用上一步的结果:登录、获取令牌并使用令牌 | 工作流 |
pepe replay LOG | 按真实流量比例将访问日志中的 URL 发送到另一个主机 | 重放 |
pepe logs FILES | 查看 nginx 日志中的内容:当前请求速率与每分钟、每小时和每天的请求速率对比、路径、错误,以及实时日志行 | nginx 日志 |
pepe compare A B | 用判定结果中的措辞说明两份报告之间的变化,并附带徽章和 SVG 卡片 | 比较 |
所有命令的所有标志都列在命令参考中,man pepe 的内容与之相同。
脚本、CI 和 Agent
每种模式都能在无界面的情况下运行,并且专为程序调用而设计:
- 版本化 JSON 报告,通过
--json生成(schema_version: 1;pepe schema会输出各报告的 JSON Schema),其中包含判定结果和诊断结果。不加--json时通过管道传递的则是文本判定结果。 - 有实际含义的退出代码:按要求完成为 0;无法启动或没有任何响应为 1;用法错误或触发护栏为 2;超过限制为 4(
--fail-if 'p99 > 300ms'、ping 的--slo)。 - 发送任何内容前检查护栏:
--allow-host .example.com、--max-requests、--max-rate、--max-concurrency和--dry-run;后者会说明将要发送的内容,但不会实际发送。可在pepe.toml中配置这些选项。 - GitHub Action,用于运行测试、将数据写入作业摘要和输出,通过
pepe compare将拉取请求与其基础分支进行比较,评论结果,并可使作业失败:CI 和 Docker。 - Prometheus 指标,使用
--metrics :9100,可用于持续负载测试或在 Grafana 中查看长时间 ping 的数据。 - MCP 服务(
pepe mcp),将各种模式作为工具提供给 Agent,并遵循启动时设定的护栏;Agent 首先会读取 AGENTS.md。
- uses: omarmhaimdat/pepe@v0
with:
url: https://staging.example.com/api/health
args: -z 30s -c 20 --fail-if 'p99 > 300ms'
baseline: auto
comment: true
pepe 的对比表现
使用 bench/ 中的套件进行测量,测试目标是一个从内存中响应的本地服务,因此测量的是客户端的开销。每 1,000 个请求的 CPU 毫秒数、峰值内存,以及每个工具报告的每秒请求数:
| 工作负载 | pepe | oha | vegeta |
|---|---|---|---|
| GET,64 个连接 | 6.2 ms · 9 MB · 160k req/s | 23.0 ms · 78 MB · 161k req/s | 90.4 ms · 26 MB · 76k req/s |
| GET,1,000 个连接 | 6.0 ms · 12 MB · 163k req/s | 21.6 ms · 101 MB · 147k req/s | 52.7 ms · 92 MB · 131k req/s |
| HTTPS,64 个连接 | 6.8 ms · 12 MB · 142k req/s | 24.8 ms · 60 MB · 156k req/s | 69.8 ms · 30 MB · 90k req/s |
这些是 pepe 在 Apple M4 Pro 上的单线程数据,该设备的环回吞吐量上限约为每秒 175k 个请求。在 Linux 上(4-vCPU arm64 虚拟机,发布时使用的 musl 构建),旁边运行单线程 wrk:
| 工作负载 | pepe | wrk | oha |
|---|---|---|---|
| GET,64 个连接 | 2.4 ms · 4.0 MB · 398k req/s | 3.5 ms · 4.5 MB · 282k req/s | 6.8 ms · 67 MB · 305k req/s |
| GET,1,000 个连接 | 3.2 ms · 5.8 MB · 296k req/s | 4.4 ms · 7.7 MB · 228k req/s | 5.6 ms · 73 MB · 183k req/s |
| HTTPS,64 个连接 | 3.3 ms · 6.0 MB · 284k req/s | 4.5 ms · 10.8 MB · 218k req/s | 8.1 ms · 42 MB · 250k req/s |
| 1,000 万个请求,256 个连接 | 2.9 ms · 4.5 MB · 343k req/s | 3.3 ms · 4.6 MB · 304k req/s | 6.5 ms · 2,404 MB · 316k req/s |
所有工作负载的测试结果(包括 pepe 持平而非领先的场景:1,000 个连接时的慢速目标、通过 TLS 传输 16 KB 请求体)、glibc 构建的影响、k6、性能分析,以及测试方法,均见 bench/README.md。当目标可以承受多个线程发送请求时,pepe 会说明这一点,而 --threads auto 会启用这些线程。
文档
完整手册按页面组织,包含所有选项和示例,见 pepe.mhaimdat.com/docs。手册源文件是 docs/ 下的 Markdown 文件;命令参考根据命令定义生成,因此始终与二进制文件保持一致。每个版本的变更记录见 CHANGELOG.md;后续计划按顺序列于 ROADMAP.md。
参与贡献
欢迎提交问题和拉取请求;CONTRIBUTING.md 介绍了构建、测试、生成文件、录制内容、基准测试以及发布流程。
许可证
MIT。请参阅 LICENSE。
致谢
感谢 tokio、rustls、httparse、h2 和 reqwest 提供请求处理支持,感谢 ratatui 和 crossterm 提供仪表盘支持,感谢 clap 提供命令行支持,也感谢 oha、vegeta、wrk 和 k6 成为基准测试表上的好伙伴。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。