使用ApacheBench做压力测试

ApacheBench, 简称 ab, 是一个非常简单易用的压力测试工具, 在产品上线之前, 使用它对服务器压力测试, 评估服务器性能, 是否能应付高并发环境, 已经是一个必须的程序。

测试对象是我博客的一篇文章, 测试环境是 LAMP和 LNMP.

使用命令: ab -kc 500 -n 10000 http://127.0.0.1:80/blog/posts/apache
-n后面的10000代表总共发出10000个请求;-kc后面的500表示采用500个并发(模拟500个人同时访问),后面的网址表示测试的目标URL,这里是给本机测试。

来看看 Apache 的测试结果:

Apache Load testing

总结一下几个关键的数据:

Requests per second: 37.78 [#/sec] (mean)

最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值

Time per request: 13234.462 [ms] (mean)

最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值

再来看看 nginx 的测试结果:

nginx Load testing

总结一下几个关键的数据:

Requests per second: 46.56 [#/sec] (mean)

最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值

Time per request: 10739.836 [ms] (mean)

最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值

从上面可以看出, nginx 在高并发环境下果然表现出色, 比 Apache 性能高出23%左右。


一些测试中经常遇到问题

  • apache ab apr_socket_recv connection refused

这个是在测试 nginx 的时候遇到的, 据说是 ab 的一个小bug, 就是如果在测试 URL 里存在 localhost 的话, 会报这个错, 只要机智点改成127.0.0.1就行了。

  • connect() to unix:/var/run/php5-fpm.sock failed or apr_socket_recv: Connection reset by peer (104)

    找到你的 php-fpm 的 www.conf 文件, 修改 listen = /var/run/php5-fpm.sock 为 listen = 127.0.0.1:9000

    然后找到你的Nginx virtual-host config file. 就是 default.conf, 修改

    fastcgi_pass unix:/var/run/php5-fpm.sock;

    fastcgi_pass 127.0.0.1:9000;

    然后重启 nginx 和 php-fpm


最后说一句, 测试Apache 的时候 mysql (其实是mariadb, 我用的 centos 7)挂了。。。。。