微信活动推广,时常瞬时并发特别高,比如一个百万粉丝的公众号,后台推送一个H5的活动,我们公司的应用在短时间内基本处于不可用的状态,如何保证高并发下的高可用呢?
Mac下安装Siege,作为开发人员可进行简单的模拟高并发,确保服务的可用性,目前容器有Tomcat和IIS,需要分别优化。
一、修改Mac文件描述符限制
在压测开始前,需要确保open files
足够大,否则会报Too many open files
错误,可以通过ulimit -a
查看,默认是256。
使用ulimit -n 10000
可以修改该值,不过这种修改并不是永久的,关闭终端会话,又会恢复回来。
二、ab
Mac默认预装了Apache,ab是Apache自带的压力测试工具,但是并发数有限,并发数一大就会报错Connection reset by peer
。
使用方法:ab -c 并发数 -n 请求数 URL
三、siege
tar -xvf siege-latest.tar.gz
cd siege-4.0.2/
./configure
make
make install
- 查看配置(可查看配置文件位置):
siege -C
或siege --config
- 修改配置:
/Users/vipinchan/.siege/siege.conf
- 使用方法:
siege -c 并发数 -t 运行测试时间 URL
这里要注意的是-t后面的时间要带单位,s表示秒,如果不带,就是分钟。
结果分析:
Transactions: 2755 hits
Availability: 70.84 % // 可用率,用100%减去可用率就可以得到错误率
Elapsed time: 26.47 secs
Data transferred: 0.56 MB
Response time: 4.85 secs // 响应时间
Transaction rate: 104.08 trans/sec // web服务器每秒处理的请求数量
Throughput: 0.02 MB/sec // web服务器每秒发送的数据容量
Concurrency: 505.04
Successful transactions: 2755
Failed transactions: 1134
Longest transaction: 16.47
Shortest transaction: 3.06
- 两种模式:default 和 benchmark
在default模式下,模拟用户在发出一个请求后,默认会延迟1秒再发出下一个请求。延迟时间可以在配置文件中修改。default模式适用于负载测试(load testing)。
在benchmark模式下,模拟用户的请求没有延迟。在服务器和网络带宽允许的条件下,模拟用户会以最快的速度发出下一个请求。我们可以在命令中加入-b 指定siege以benchmark模式运行。
- 压测命令
常用参数
-c,并发用户,默认为10
-r, 运行测试次数。
-t, 测试时间
核心参数
-d,建议配置为“1”,每个请求前的随机延迟
-i,随机点击URL。
-f,选择一个特定的URLS FILE。
-b,暴力测试,无延迟,查看某个压力下,资源的变化情况
压测控制参数
-q,关闭并禁止输出。
-l,--log [= FILE] LOG到FILE。如果没有指定FILE,则使用默认值:PREFIX/var/siege.log
定制化参数
-H,--header =“text”添加一个头来请求(可以是很多)
-A,--user-agent =“text”请求中设置用户代理
-T,--content-type =“text”在请求中设置Content-Type
- 常用命令
# 200个并发对http://www.google.com发送请求100次
siege -c 200 -r 100 http://www.google.com
# 在urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt
# 随机选取urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt -i
# delay=0,更准确的压力测试,而不是功能测试
siege -c 200 -r 100 -f urls.txt -i -b
# 指定http请求头 文档类型
siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b
- 注意事项
发送post请求时,url格式为
http://www.xxxx.com/ POST p1=v1&p2=v22
如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确。
参考:
https://www.jianshu.com/p/21b2beb08a8a
原文地址:https://www.cnblogs.com/vipinchan/p/9638575.html