参考 : http://zjumty.iteye.com/blog/2221040
1.测算单机最大带宽
ethtool eth0
2.监控流量
nethogs: 按进程查看流量占用
iptraf: 按连接/端口查看流量
ifstat: 按设备查看流量
ethtool: 诊断工具
tcpdump: 抓包工具
ss: 连接查看工具
其他: dstat, slurm, nload, bmon
3.使用wrk测试qps
安装
apt-get install libssl-dev git
git clone https://github.com/wg/wrk
make
./wrk -v 查看版本
模拟post请求,编写post数据 post.lua
-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header
wrk.method = "POST"
wrk.body = "kXY+bkCcOFKgByuHz/H7BsLDelTtllzZp0HMYH5z7lb5sB0o9/yy4FixwhfFntFs129zh5g9/vyw\
7gWoRtk1vF03K0pxUWuZq+Hv69moyyOs5me7pI1lxMSw76e4M8yq/MmVKSIN1c8pZnhIUkYhOIuo\
y8OXTC7fySmuSIuNXBmMl7hKipUO1Yfe"
wrk.headers["Content-Type"] = "text/plain"
或者
wrk.method = "POST"
wrk.body = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
发送测试请求
wrk 默认超时时间是1秒. 这个有点短. 一般设置为30秒. 看上去合理一点.
./wrk -t8 -c10000 -d30s -T30s --script=post.lua --latency http://127.0.0.1:12005/api/events
-t : 一般线程数不宜过多. 核数的2到4倍足够了。
-c : 使用进程模拟的连接数量。
-d : 在给定的时间范围内。s:秒;m:分
-T : 默认超时时间是1s
测试结果
Running 30s test @ http://www.bing.com (压测时间30s)
8 threads and 200 connections (共8个测试线程,200个连接)
Thread Stats Avg Stdev Max +/- Stdev
(平均值) (标准差)(最大值)(正负一个标准差所占比例)
Latency 46.67ms 215.38ms 1.67s 95.59%
(延迟)
Req/Sec 7.91k 1.15k 10.26k 70.77%
(处理中的请求数)
Latency Distribution (延迟分布)
50% 2.93ms
75% 3.78ms
90% 4.73ms
99% 1.35s (99分位的延迟)
1790465 requests in 30.01s, 684.08MB read (30.01秒内共处理完成了1790465个请求,读取了684.08MB数据)
Requests/sec: 59658.29 (平均每秒处理完成59658.29个请求)
Transfer/sec: 22.79MB (平均每秒读取数据22.79MB)
时间越长样本越准确. 如果想测试系统的持续抗压能力, 采用 loadrunner 这样的专业测试工具会更好一点.