众所周知mac系统自带了ab工具,谁知神坑就此开始,当我满心欢喜地照常输入以下压测命令时,花式报错开始了:ab -n 300000 -c 1000 http://127.0.0.1:8080/seckill/seckill
简单说明下,这个命令-n 300000
表示发起30w个请求,-c 1000
表示指定并发数是1000,后面的url就是要访问的接口,发的是get请求,一切正常的话,在终端会显示压测的种种指标,举例如下图:

- socket: Too many open files (24)
最常见的错误,这个错误解决起来很简单,一般是由于MacOSX默认的open files数值过小导致的。使用ulimit -a
查看当前系统的默认文件打开数。如下图,可以看见当前bash设置的是2048(默认值一两百吧,这个是已经改过的版本),进一步使用ulimit -n 2048
修改,注意该修改只对当前bash生效,重开后要重新改

- apr_socket_recv: Connection reset by peer (54)
头痛的问题来了,这个问题折腾了一晚上+一早上都没解决,把网上的方法都试了,主流的说法是mac自带的ab有缺陷,会限制并发数,解决办法:下载最新的apache并重新编译,备份原来的ab并将新编译的ab替换到原来的路径。
具体的流程网上不靠谱的千千万,很想diss一下博主们,有的命令就直接是错的,有的可能是源已经过期了,有的用了复杂的方法,百度搜的真的不靠谱,关键时刻还是要google啊
直接上可以跑通的:
以下是报错的内容 |
虽然正常的流程就那么点,但网上各种误导之下真的浪费了很久,然后在装齐3个ab要求的工具再configure ab的时候,可能还会有报错like:./configure时出现以下错误:C compiler cannot create executables
服了,又是一通goole,百度,有的说brew upgrade gcc
,更新了还是不行,这时候依稀回忆起以前也碰见过类似的,是Xcode版本太老了引起的,遂更新Xcode(校园网下6个G直接下了一个通宵。。。。),第二天一早果然问题解决
这也是我不喜欢mac系统的一点,升级个系统版本,就各种不兼容不匹配👎,升系统千万慎重!你永远不知道升完之后哪个环境就炸了
最后这些错都解决了,满怀期待的用sudo cp替换系统中老的ab时,又报错了,提示没有权限,解决见:
关于MAC系统没有修改/usr/bin和/usr/sbin文件夹权限问题
嗯,至此虽然ab成功更新到了新版本,然并软。。。。
我都开始怀疑是我程序的问题了。。。但之前windows环境、linux环境就跑压测跑的很顺畅,迷
如果有同学遇到了同样的问题,在升级ab版本后成功解决的,求不吝赐教。。。
之后不放弃的我又试着在虚拟机的windows里面装ab,然鹅,虚拟机的文件目录的地址实在太鬼畜了,shell完全cd不到相关的地址,放弃。。。
后续:现在升级后的ab依然只能跑聊胜于无的并发,经测试-n 10000 -c 100还是可以的,-c再往上就会出Connection reset by peer (54)
参考:
Fixing ApacheBench on OS X Lion
运行ab测试时socket: Too many open files (24)的解决办法
configure: error: C compiler cannot create executables
以下内容或者类似的这种均不适合借鉴:(别在里面浪费时间了)