很多人问并发这个东西,特别是老狐友,很喜欢跑过来问并发多少,你可以支持多少人?
这个其实是伪命题
访问并发并不是一个问题,而是一个体系问题。
体系问题,要找出体系中的瓶颈。
针对瓶颈再去解决并发的问题。
该堆配置要堆配置,要做负载均衡要做负载均衡,要上缓存时要上缓存,数据库要做读写分离就做读写问题
相应压测工具能够早点让我们发现系统中的瓶颈所在。
Apache Bench 是 Apache 服务器自带的一个web压力测试工具,简称 ab 。
ab 非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
其实socket服务器也是能用其来测试的。
Apache Bench的原理:ab命令会创建 多个并发 访问线程,模拟 多个访问者 同时对某一 URL地址 进行访问。
它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
优点:命令行工具, 发出负载的计算机要求很低,其原理类似CC攻击,少量的测试机资源会给目标服务器造成巨大的负载,自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。工具小巧简单,上手学习较快,可以提供需要的基本性能指标。
缺点:基本性能指标没有图形化结果,不能监控。
首先,需要安装 Apache 服务器,下载地址:https://www.apachelounge.com/download/ ,
因为我是64位操作系统选,所以选择上面的一个压缩包,如下图所示:
解压后:
直接双击 abs.exe 是无法打开的。
正确的方式是打开cmd命令,进入Apache Bench 的bin目录,启动 abs.exe ,如下图所示:
使用命令
ab一般常用参数就是 -n, -t ,和 -c。
-c(concurrency)表示用多少并发来进行测试;
-t表示测试持续多长时间,单位是秒;
-n表示要发送多少次测试请求。
一般-t或者-n选一个用。
GET
对于模拟GET请求进行测试,ab非常简单,就是:ab -n 100 -c 10 http://127.0.0.1:801/a1send.fsp?proc=send
POST
对于模拟POST请求进行测试,则稍微复杂些,需要把将要post的数据(一般是json格式或键值对)放在文件里。比如建立一个文件以c:\postdata.txt,放入:
{“name”:“123”}
然后用-p参数解析并发送这个json数据:
ab -n 100 -c 50 -p c:\postdata.txt -T application/x-www-form-urlencoded http://192.168.0.99:801/a3post.fsp?proc=post
猫猫对调试服务器来测试一下看看,结果如下:
调试服务器一般用于开发环境(开发阶段,快速方便),不建议用于正式环境。
重要指标:
Requests per second: 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
Time per request: 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
Time per request: 每个连接请求实际运行时间的平均值
Transfer rate: 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题