ApacheBench for mac 踩坑记

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

一般我们比较关心的指标有两个1.QPS(红框部分)2. 90%line(页面底部90%那一行,表示90%的请求完成的平均时间),上图是已经做过一定优化的秒杀系统的压测结果,根据当时线上机器的性能峰值来说,已经优化的不错了。 正当我期待本地的结果能跑出多少QPS的时候,报错开始:
  1. socket: Too many open files (24)

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

  1. apr_socket_recv: Connection reset by peer (54)

头痛的问题来了,这个问题折腾了一晚上+一早上都没解决,把网上的方法都试了,主流的说法是mac自带的ab有缺陷,会限制并发数,解决办法:下载最新的apache并重新编译,备份原来的ab并将新编译的ab替换到原来的路径。

具体的流程网上不靠谱的千千万,很想diss一下博主们,有的命令就直接是错的,有的可能是源已经过期了,有的用了复杂的方法,百度搜的真的不靠谱,关键时刻还是要google啊

直接上可以跑通的:

# 以下是报错的内容
$ ab -n 1 http://www.google.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.google.com (be patient)...apr_socket_recv: Connection reset by peer (54)</pre>

To fix this, you'll want to run the following commands. In my example, the latest version of Apache is 2.4.3, but by the time you read this it may be a newer version, so just in case, <a href="http://apache.mirrors.pair.com/httpd/" target="_blank">download the latest Apache</a> from their website.

# 以下是解决方案(homebrew要是没装的话网上搜一下,一大把)
brew insatll apr # 先装3个ab要求的工具(不装后面会报错),网上很多帖子说的这三个工具包都是要自己下载,再解压,再配置路径,再make,无语,明明brew install都能装, 浪费了不少时间,(mmp已经在嘴边了)
brew install apr-util
brew install pcre # install PCRE, required by Apache
wget http://apache.mirrors.pair.com/httpd/httpd-2.4.3.tar.bz2 # download Apache,不用wget自己下压缩包解压效果也一样的,没有wget的话先brew install wget
tar -xzvf httpd-2.4.3.tar.bz2 # extract Apache
cd httpd-2.4.3 # enter Apache directory
./configure && make # configure and compile Apache
sudo mv /usr/sbin/ab /usr/sbin/ab.bak # backup old ApacheBench(备份这部无所谓,old的版本我直接没备份)
sudo cp support/ab /usr/sbin/ # install new ApacheBench
ab -n 1 http://www.google.com/ # test new ApacheBench

虽然正常的流程就那么点,但网上各种误导之下真的浪费了很久,然后在装齐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

以下内容或者类似的这种均不适合借鉴:(别在里面浪费时间了)

ab(Apache Benchmark)运行apr_socket_recv报错

Mac使用ab并发测试问题

Author: Apiao
Link: http://zc-apiao.space/2019/04/21/2019-04-21/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.