这两天在折腾内网统一登录工具,做了个模拟接口,为了看自己做的 session/token 部分是否有坑,跑了个 ab 测试。 2014 rmbp Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz ab -c 1000 -n 50000 基本上的数据是 不带 session/token 纯静态 JSON 数据的接口是 25k rps 带 session/token 纯静态 JSON 数据的接口是 18k rps 基本还算正常。
接着想到前几个月升级的游戏电脑上跑一下看看数字让自己爽一下。 本想 8 核桌面 U 总比双核低电压 U 要翻个几倍吧,结果反而郁闷了一把。 ryzen 7 1700 oc 3.6 ghz ab -c 1000 -n 50000
不带 session/token 纯静态 JSON 数据的接口是 35k rps 带 session/token 纯静态 JSON 数据的接口是 32k rps
第一时间反映觉得自己果然是个坑货,写出来的代码里肯定都是坑。
但转念又一想,又觉得不靠谱。在我的笔记本上跑测试的时候,基本上是服务占用 280%左右的 cpu,ab 占用 90%左右的 cpu。也就说,如果不跑 ab,裸跑服务的话,我的低压 I5 能超过超频过的 ryzen 7?这样的话,AMD 这哪是 360 度翻身啊,这至少是 720 度翻身了。
再仔细一看 top 数据。服务只有跑了 400%多的 cpu,也就之跑了两个多核的性能,而 ab 倒是 99%了。
所以
附:
图一:不带 session 的测试结果
ab -c 1000 -n 100000 http://127.0.0.1:8000/usercenter/api.v1/frontend/systeminfo
https://wx4.sinaimg.cn/large/63fa5d6fgy1fhprciou7bj20hl07pwet.jpg
图二:带 session 的测试结果
ab -H "Token: admin1-yJAb9MwUTKow39ykbUdLn9iVxDkXCvG1ZVxMqz7W5IxV1upllIucX58vhU8bSwUTFZGvgjBPPL8PeVSKaiqzfIDK1l3alTDGytxCjXmXHzhS3raXc1Dgi1PHBFbC45GMfqSPyJB0aepiyHAahYsVc2nv5zNzOncTjF55hAhqwKZBs546JiCot8jVXqHuJYaO9Q4wwGA20okVbU43n2pLd3rQhEKGj4BHwvfJbbEaQUiukMSofmMPeONPvswdKTn5" -c 1000 -n 100000 http://127.0.0.1:8000/usercenter/api.v1/rest/user
https://wx2.sinaimg.cn/mw690/63fa5d6fgy1fhprcis41sj20g5077t90.jpg
图三:测试时的 cpu 占用状况
https://wx1.sinaimg.cn/mw690/63fa5d6fgy1fhprcionkfj20h803maac.jpg
图四:测时事的 CPU 实时占用与曲线
https://wx1.sinaimg.cn/mw690/63fa5d6fgy1fhprciqwj6j20xt05l0v7.jpg
1
jarlyyn OP 找了个 go 语言开发的压力测试工具 go-wrk,可以跑满 cpu。
基本确定了是 ab 的问题。 这工具在跑不带 session 的情况下 cpu 占用完全压制了我的服务……跑出来的数字大概是 100k rps 左右 带 session 的时候我的坑爹代码终于发挥了实力占用了更多的 cpu,跑出来大概是 66k rps 左右。 我的代码真是不负我所望的坑啊…… 那么现在的问题是是否有 cpu 占用更小效率更好的测试工具么? 这样能更好的体现出自己代码的效率问题,同时也便于我看数字自 high …… |
2
msg7086 2017-07-20 03:33:23 +08:00
多开 ab ?万兆局域网另外跑一台做客户端?
|
3
jarlyyn OP |
4
jarlyyn OP |