CatCoding

性能测试小工具

2022-05-06

procpath

一个 Python 实现的小工具,我们可以用来不断监控某个进程 (或者一组进程) 的资源使用情况,比如内存、CPU、IO 等。使用说明在这里:Procpath · PyPI

pipx install Procpath

安装即可,然后使用这个命令先来生成一个统计数据存储在 sqlite,还可以生成统计图:

我之前排查一个内存问题时就用这个工具来调试,非常方便。比如我要统计 image-api 这个进程的内存情况,并生成图就使用下面这个脚本:

nohup ./image-api-go > infer.log &

sleep 3
pid=`pidof ./image-api-go`
echo "begin record $pid ..."
rm -rf ff.sqlite

/home/coder/.local/bin/procpath record -i 1 -r 60 -d ff.sqlite -p $pid
/home/coder/.local/bin/procpath plot -d ff.sqlite -q rss -p $pid -f rss.svg

echo "recorded $pid ...."

如果你看看 procpath 的代码发现也非常简单,就是通过 Linux 系统下的 /proc/{pid} 下面的数据来进行统计的:

/proc/{pid}/stat :进程资源统计
/proc/{pid}/io :进程 IO 相关统计
/proc/{pid}/fd :进程句柄

具体通过 man proc 查询 Linux proc 相关的文档。类似的还有我以前记录过的 调优的小工具 RunLim

Hyperfine

sharkdp/hyperfine: A command-line benchmarking tool

这个 Rust 命令行工具可以用来批量跑程序,找出程序的耗时区间,生成的结果可以输出为 JOSN 格式,这样能用来可视化对比结果。

比如我们使用这个工具来对比 youkicrunrunc 的性能,add the benchmark result to README, containers/youki

hyperfine --prepare 'sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' --warmup 10 --min-runs 100 'sudo ./youki create -b tutorial a && sudo ./youki start a && sudo ./youki delete -f a'

hyperfine --prepare 'sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' --warmup 10 --min-runs 100 'sudo crun create -b tutorial a && sudo crun start a && sudo crun delete -f a'

hyperfine --prepare 'sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' --warmup 10 --min-runs 100 'sudo runc create -b tutorial a && sudo runc start a && sudo runc delete -f a'

跑出结果如下:

这个工具的作者用 Rust 写了好几个非常好用的命令行工具,比如 fd 快速查找文件等。

wrk

wg/wrk: Modern HTTP benchmarking tool

这个工具可以用来批量发起 HTTP 请求,使用方法很简单:

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

使用 12 个线程、保持 400 个 HTTP 连接,跑 30 秒。我以前使用这个工具来对接口进行压力测试,非常方便。

还有个 Python 的测试工具叫作 Locust - A modern load testing framework,这个功能更强大一些,我们可以写 Python 脚本来扩展测试逻辑,当然也可以用来做压力测试。

公号同步更新,欢迎关注👻
Tags: 工具