我们要测试 nginx 的负载能力,需要借助压力测试工具。本博客是使用 Apache 服务器自带的一个 web 压力测试工具 ApacheBench ,简称 ab。ab 是一个命令行工具,即通过 ab 命令行,模拟多个请求同时对某一 URL 地址进行访问,因此可以用来测试目标服务器的负载压力。
ab 的安装
ab 的安装可以去官网下载,如果不想安装 apache,又想使用 ab 命令,可以直接安装工具包 httpd-tools,该工具包会将 ab 命令安装到 /usr/bin 下,因此在任何地方都可以调用:
yum -y install httpd-tools
检查 ab 的安装结果
1 2 3 4 5 6
ab -V # 显示下面信息表示安装成功 This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/
ab 的简单使用
1 2
# 查看 ab 的命令及参数 ab -help
1 2 3
# 最简单的使用 # -c:一次并发请求的数量;-n:请求总次数 ab -c 5000 -n 200000 http://192.168.222.101:80/index.html
优化思路
每个请求都需要建立 socket 连接,那么影响并发量的因素之一:
客户端不允许一次性创建过多的连接
服务端不允许一次性创建过多的连接 每个请求都要访问一些资源,那么影响并发量的因素之一:
服务端不允许一个文件在同一时间点被访问 N 次,相当于一个文件在服务端打开 N 次
我们在使用 ab 模拟并发访问后,执行 dmesg 命令,查看请求的信息
1 2 3
dmesg # 执行结果的最后一行为:possible SYN flooding on port 80. Sending cookies. # 解释:在同一时间有过多的请求访问 80 端口,导致系统误认为遭受了洪水攻击