摘要:在网上找了很多关于windows安装Apache ab安装及压力测试的,但是很遗憾失败的好多,贡献一下我自己测的吧。
ab 是apachebench的缩写。
ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
一:安装
1)打开网址下载:http://httpd.apache.org/download.cgi
选择 Files for Microsoft Windows
2)直接选择 ApacheHaus
3)我windows10的系统选择【Apache 2.4.41 x64】点击后会弹出一个下载点击下载就好。
4)文件解压到本地文件夹下,如果不是解压在c盘,需要设置参数:
- 解压文件后里面有一个【Apache24】的文件夹,将这个文件夹放到你需要存放的盘符中
- 我的解压到了D盘下,需要设置参数,打开conf文件夹中的 --> httpd.conf文件 使用文本编辑器打开
需要修改的有三个地方:
1> 运行根目录,修改成自己解压到本地的路径
注:Define SRVROOT的意思是定义了一个名为SRVROOT的变量
例如APACHE安装目录是c:/apache24,则Define SRVROOT=“c:/apache24”
这样后没再需要使用这个路径的时候,输入${SRVROOT}就可以了
2> 监听端口,默认监听端口是80,如果已被使用会报错需要修改,如果80端口未被使用,可不修改;如果修改了监听端口,则需要把ServerName localhost也相应改成同样的端口号
3> DocumentRoot 测试文件存放地,且该目录必须存在(我这里在Apache24文件夹下创建了test文件夹)
配置完成后,进入D:Apache24/bin目录下(也就是你的程序目录),按Shift同时右击,选择 在此处打开命令窗口运行 【httpd.exe -k install】
(注意:要使用管理员权限打开命令行)
如图完成(我这里有个错误不必纠结,你前面的目录要保证存在就不会有错误)
如何启动、关闭?
【services.msc】
找到apache2.4,可以在左侧点击重启、关闭;第二种可以使用命令启动:httpd.exe -k start
第二种还是进入bin目录执行命令就好
二:测试
1)首先进入到apache27\bin的目录中
使用命令【ab】出现如下,可以看到参数的含义
1 | D:\utils\Apache24\bin>ab |
2)首先测试最简单的【无参数请求】
【ab -c 10 -n 10 http://localhost:8085/add】
参数解释:
-n :请求数
-c: 并发数
3)接着我们测试【get方法带参数】直接在url后面带参数即可
【ab -c 10 -n 10 http://localhost:8085/add?ceshi=nihao】
4)模拟post请求
首先你需要在你的当前目录也就是D:\Apache24\bin目录下创建一个post.txt的文件(当然你也可以自己命名),内容格式为【id=001&name=java】
【ab -n 100 -c 10 -p post.txt -T application/x-www-form-urlencoded http://localhost:8085/add】
这里你要特别注意:你是否发现你在网上有很多都是加引号的,我明确告诉你不要加任何一个引号使用空格,因为我测试的使用引号是错误的(最后一个值可以加但是还是不加的好)
顺便把后端接收参数的代码也发出来吧
1 | @RequestMapping(value = "/add",method = RequestMethod.POST) |
如果你创建post.txt文件不在bin目录中那么你需要这样写(例如在D盘下的post.txt)
【ab -n 100 -c 10 -p d:\post.txt -T application/x-www-form-urlencoded http://localhost:8085/add】
最后我们来测试如何使用post的方式传json格式的参数
post.txt中应该写成json格式的参数
1 | { |
java后台的接收参数类
1 | /** |
java后台的的Controller
1 | @RequestMapping(value = "/add",method = RequestMethod.POST) |
最后执行命令(还是要进入到bin目录中的)
【application/json】是关键
【ab -n 100 -c 10 -p post.txt -T application/json http://localhost:8085/add】
如果你还需要添加header请参考【使用命令【ab】出现如下,可以看到参数的含义】
测试结果主要看三个数据
1.Requests per second:吞吐率
服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
2.Time per request:上面的是用户平均请求等待时间
处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
3.Time per request:下面的是服务器平均请求处理时间
处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
可以根据固定并发数,增加请求次数或者固定请求次数,调整并发数来查看上面三个值得变化来调优服务器