Posted on

woocommerce并发能力

并发能力,是指 吞吐能力。

并发的2个问题针对解决:

1,是不是并发调度问题
2,是不是并发处理问题

压力测试简介:

An Introduction to Load Testing | DigitalOcean


压力测试工具

1, AB 压力测试

sudo apt install apache2-utils
ab -n 5000 -c 500 https://yuan.liangdabiao.com/

参考文档:ab(http)与abs(https)压测工具 – lsgxeva – 博客园 (cnblogs.com)

Requests per second: 19.66 [#/sec] (mean)
//吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 5087.180 [ms] (mean)
//用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
Time per request: 50.872 [ms] (mean, across all concurrent requests)
//服务器平均请求处理时间,大家最关心的指标之三


2,Pageload.io
非常不错的可视化压力测试工具,帮助进一步检查,作为最后是否通过的检测标准。

3,Jmeter
非常不错的本地压力测试,充分利用本地的强大计算和网络能力,可以对比测试结果,方便排查性能问题原因。






需要多少并发能力:

1,从GA,日志等检查每天的流量,计算正常时间每分钟访问的流量和人次。
2,例如应付普通日常是 250人/分钟 ,那么为了活动做好准备,同时也要并发测试 2500人/分钟 ,。
3,同时也要为压力测试做好准备,达到 10000人/分钟 ,能够让服务器不宕机。
4,要测试不同种类的页面并发能力。重点:首页,结算页,商品页,列表页。
注意: 我们不是BAT,没有那么高并发,流量都是要广告买回来的。按实际情况准备好10倍的应付能力就可以了。



并发测试流程:

注意:Jmeter压力测试工具测试,检查情况,吞吐率是多少。然后再检查性能监控的指标情况 【Tideways】,发现什么问题。然后迭代,进一步加大并发测试。

测试过程如下:
0,先把 外套都脱了 , (去掉缓存,静态缓存等)
1, 1核2g服务器 测试
2, 加上 负载均衡 + 强大服务器 测试
3, 通过日常并发 250人/min, 再通过活动并发 2500人/min,再通过10000人/min 压力测试。
4,每一个页面都进行最高压力测试,通过


外套脱了

下架 redis对象缓存,下架页面静态缓存。


1核2g服务器测试:

测试单核性能,找到标准吞吐率。

测试结果是:Requests per second = 1.7 , waiting = 658ms
性能检测结果:

发现问题: 1,sql太多。2,Unaccounted Wait 太久。
What is “Unaccounted Wait”? :: Documentation (tideways.com)


那么,加服务器8核,加负载均衡:






增加了一个8核8g的小型服务器,测试看看:


测试结果是:Requests per second = 12-15 , waiting = 500ms ,并发处理能力增加8倍,对应着CPU的核数增加。
性能检测结果:

发现问题: 1,sql太多。




那么,加缓存:

希望:提升10倍,应付活动等并发:Requests per second =》 40/s – 160 /s,
开启redis对象缓存+页面静态缓存:

Jmeter测试:


测试结果是:Requests per second = 80 , waiting = 263ms
同时,通过10000人/min 的压力测试。
性能检测结果:

发现问题:都是几ms,没有问题,很好。


最后用可视化 loader.io 测试 每一个页面:

checkout页:

备注: checkout url可以这样测试 https://woocommerce.liang/index.php/checkout/?add-to-cart=191&variation_id=193

因为有流量转化漏斗,这里只需要达到10分1的并发就可以。250人/min – 1000人/min , 看下图测试结果,1000人/min 并发的结算功能 是没有问题。


商品详情页:
需要 2500 – 10000人/min,结果通过:


商品列表页:
需要 2500 – 10000人/min,结果通过:


备注如下:

“Unaccounted Wait” 很高 ?

当看到tideways显示,”Unaccounted Wait” 很高,那么就可能要垂直升级服务器性能了

1,先检查php.ini配置


php-fpm.conf有两个至关重要的参数:
一个是”max_children”,另一个是”request_terminate_timeout”, 都检查。参考:php-fpm占用cpu和内存过高100% 解决办法 – 上善若水-随 – 博客园 (cnblogs.com)



2,考虑升级服务器,升级多大服务器呢? 【magic formula】

参考:How to Estimate How Many Website Visitors Your Hosting Can Deal With (servebolt.com)
The magic formula we use for our estimates, that captures the essence and provides us an approximate number of how many users you can have simultaneously on your site in Google Analytics is:
(number of CPU cores / Average Page Response Time in seconds) * 60 * User Click Frequency in seconds = Maximum simultaneous users

(1),从GA看看,每分钟的用户有多少人在线。 例如,我们普通需求是平时 250人/min,要达到 2500人/min。

(2),利用公式计算: ( cpu核数 / 页面响应时间) * 60 * 用户点击频率 = 最大并发用户数 。
用户点击频率 = 平均1次/min (普通独立站)
( 4核 / 0.400s ) * 60 * 1 = 600 人/min
(32核 / 0.323s) * 60 * 2 = 11 880人/min


简化公式: 吞吐率 * 60 = 承受最大并发用户数的能力

250人/min , 那么就需要 吞吐率 达到 4/s Requests per second
2500人/min , 那么就需要 吞吐率 达到 40/s Requests per second
10000人/min, 那么就需要 吞吐率 达到 160/s Requests per second





负载均衡问题 ?


RDS: 数据库需要统一放在RDS.
Offload 资源:
放在Cloudflare CDN:
https://wordpress.org/plugins/cloudflare/
放在 S3/OSS

https://cn.wordpress.org/plugins/amazon-s3-and-cloudfront/
不停重定向,解决方法:

在config.php 加上:
  $_SERVER['HTTPS'] = 'on';
  $_SERVER['SERVER_PORT'] = '443'; 

redis性能问题?



解:升级。


mysql 性能问题?


解:升级。


活动已经过去,去掉添加的高配服务器