准备两台linux服务器,一台安装nginx,一台安装ApacheBench工具对nginx服务器进行测
ApacheBench 是一个指令列程式,专门用来执行网站服务器的运行效能,特别是针对Apache 网站服务器。这原本是用来检测 Apache 网站服务器能够提供的效能,特别是可以看出Apache能提供每秒能送出多少网页。
如果还没有安装nginx的可以看我写的一个安装nginx的文章
下载安装nginx
下载Apache
yum install httpd -y
启动apache
service httpd start
——我是在centos6下运行的,centos7使用systemctl start httpd
访问ip,防火墙开启80或使用service network stop直接关闭
ab -n500 -c500 http://192.168.195.111/
-n为请求总数,-c为并发数,后面为测试的服务器地址
——注意ab命令在安装时就已经添加到环境变量了,所以直接使用即可
这里使用到了百度翻译这款神奇的工具,无需下载(下面直接翻译,没有任何改动)
[根] # @主机/从C2 - N10 192.168.195.111 http:/ /
这是一个修改版本2.3 ApacheBench <,> 655654美元:美元
版权所有1996年亚当特维斯,宙斯科技有限公司www.zeustech.net http:/ / /
Apache软件基金会的许可,http://www.apache.org /
基准…………………192.168.195.111(的病人)。
1.6.3 Nginx服务器软件:/
服务器的主机名:192.168.195.111
服务器端口:80
文件路径:/
文件长度:129字节
并发2级:
测试时间:10秒0.023 for
完整的要求:10
失败的请求:0
写错误:0
完全转移:3680字节
HTML:1290字节transferred
第二:通过请求/秒] [ # 441.29(均值)
时间:通过请求4.532 [质谱](均值)
时间:通过请求2.266 [质谱](均值,在所有的并行请求)
传输速率:[ ]个字节/秒158.59
连接时报(MS)
[分钟] + / SD均值中值最大
连接:0 0 0.2 0 1
处理:2 2 10 3 2.4
等待:2 2 9 3 2.3
总:2.5 10 2 3 2
在一个请求到依一定的时间(ms)
50%的2
66%的3
3 75 %
80%的3
90%的10
95%的10
98%的10
99%的10
100%(10长的请求)
稍微看一下,我们就可以知道测试服务器能够承受500并发请求
下面测试1000个并发连接
ab -n1000 -c1000 http://192.168.195.111/
依旧是没有问题
下面测试1500个并发连接
ab -n1500 -c1500 http://192.168.195.111/
提示我们打开文件太多,注意对linux一切皆文件,所以请求数也是文件
使用ulimit -a | grep open命令查看linux设置的文件打开数量
这里为1024,所有1500肯定会提示打开文件数量太多
使用ulimit -n 65535临时修改最大连接数为65535(注意:两台服务器都需要设置)
网上有很多修改最大连接数的文章,这里不细说
再次进行测试
ab -n1500 -c1500 http://192.168.195.111/
结果如下,发现竟然还有失败的请求
基准192.168.195.111(耐心)
已完成150个请求
已完成300个请求
已完成450个请求
已完成600个请求
已完成750个请求
已完成900个请求
已完成1050个请求
已完成1200个请求
已完成1350个请求
已完成1500个请求
已完成1500个请求
服务器软件:nginx/1.6.3
服务器主机名:192.168.195.111
服务器端口:80
文档路径:/
文档长度:129字节
并发级别:1500
测试时间:1.049秒
完成请求:1500
失败的请求:934
(连接:0,接收:0,长度:934,异常:0)
写入错误:0
非2xx响应:934
传输总量:537990字节
传输的HTML:252342字节
每秒请求数:1429.90[/秒](平均值)
每次请求时间:1049.021[ms](平均)
每个请求的时间:0.699[ms](平均,跨所有并发请求)
传输速率:接收到500.83[kbytes/sec]
如果查看nginx错误日志,会发现nginx会提示我们打开的文件过多,所以nginx也配置了客户端连接数
工作进程的个数,默认为1,设为auto将
worker_processes auto;
设置最多打开的文件数量
worker_rlimit_nofile 65536;
worker_connections:每个进程可接收的连接数
muiti_accept on:允许一个工作进程响应多个请求
events {
worker_connections 65535;
muiti_accept on;
}
nginx -s reload重新加载配置文件
再次进行测试
ab -n1500 -c1500 http://192.168.195.111/
修改nginx.conf在http里面添加如下
limit_conn_zone开辟了一个名称为perip,大小为10M的内存空间用于保存客户端IP
limit_conn perip 10表示同一个IP最多10个并发请求
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 10;
使用nginx -s reload重新加载
进行测试
ab -n1500 -c1500 http://192.168.195.111/
最终只有10条成功执行,说明配置成功
limit_conn_zone开辟了一个名称为rs,大小为10M的内存空间用于限制请求速度
rate=3r/s表示最多一秒三次(注意这个是速率)
limit_req_zone $binary_remote_addr zone=rs:10m rate=3r/s;
为了方便测试,我们在下面添加limit_req zone=rs;表示访问该路径下的请求将使用此内存空间进行请求速度限制
server {
listen 80;
server_name localhost;
location / {
limit_req zone=rs;
root html;
index index.html index.htm;
}
}