Skip to content

Latest commit

 

History

History
82 lines (69 loc) · 2.67 KB

README_cn.md

File metadata and controls

82 lines (69 loc) · 2.67 KB

Hertz-Benchmark

English | 中文

调研其他项目的 benchmark 以及 HTTP 使用场景后,我们觉得 Echo 场景能够反映真实的使用场景。本项目提供若干 HTTP 框架在 Echo 场景下的性能记录。

使用说明

同机压测

执行前请先确认满足环境要求

Server

./scripts/benchmark_server.sh

Client

./scripts/benchmark_client.sh

Profiling

由于默认压测参数会比较迅速完成一次压测,为了获得更长采集时间,可以手动在 ./scripts/benchmark_server.sh 中调整压测参数 n 大小。

Profiling Server

不同 server 的 port 映射参见相应脚本,如:

cat ./scripts/benchmark_pb.sh

# ...
repo=("hertz" "fasthttp" "gin" "fasthttp_timeout")
ports=(8000 8001 8002 8003 8004)

获取到对应 server 端口号后,执行:

go tool pprof localhost:{port}/debug/pprof/{pprof_type}

你也可以用 wrk 作为发压端,参考下面的命令。

./scripts/benchmark_wrk.sh

# parse data
# ${input_file} locates in /output/$(date +%F-%H-%M).log
# specify one ${output_file}
python ./scripts/wrk/parse_data.py ${input_file} ${output_file} 

# render images
python ./scripts/reports/render_images.py ${output_file}

你也可以用 ab 作为发压端,参考下面的命令。

./scripts/benchmark_ab.sh

# parse data
# ${input_log_file} locates in /output/$(date +%F-%H-%M).log
# ${input_latency_file} folder locates in /output/latency_$(date +%F-%H-%M)
# specify one ${output_file}
python ./scripts/ab/parse_data.py ${input_log_file} ${input_latency_file} ${output_file} 

# render images (ab does not provide tp999)
python ./scripts/reports/render_images.py ${output_file}

环境要求

  • OS: Linux
    • 默认依赖了命令 taskset, 限定 client 和 server 运行的 CPU; 如在其他系统执行, 请修改脚本。
  • CPU: 推荐配置 >=20核, 最低要求 >=4核
    • 压测脚本默认需要 20核 CPU, 具体在脚本的 taskset -c ... 部分, 可以修改或删除。

参考数据

相关说明:

该压测数据是在调用端有充分机器资源压满服务端的情况下测试,更侧重于关注服务端性能。后续会提供调用端性能数据情况。

配置

  • CPU: AMD EPYC 7Y83 64-Core Processor 2.7GHz
    • 运行限定 server 4-CPUs,client 16-CPUS
  • OS:Debian GNU/Linux 10 (buster)
  • Go 1.19

数据 (Echo,100 concurrency,1k Header)

  • 四个框架的横向比较 Performance
  • 三个框架的横向比较 Performance