Posted on

并发能力

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

并发的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
非常不错的本地压力测试,充分利用本地的强大计算和网络能力,可以对比测试结果,方便排查性能问题原因。

magento自带Jmeter测试方案:
using the Magento Performance Toolkit and JMeter
https://devdocs.magento.com/guides/v2.3/config-guide/cli/config-cli-subcommands-perf-data.html
https://www.mageplaza.com/blog/magento-2-performance-toolkit/




需要多少并发能力:

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



并发测试流程:

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

测试过程如下:
0,先把 页面性能 完成
1, 做好varnish的工作
2, 加上(强大服务器 +强大网络)测试
3, 通过日常并发 250人/min, 再通过活动并发 2500人/min,再通过10000人/min 压力测试。
4,每一个页面都进行最高压力测试,通过


Magento并发优化手册:

建议先读读官方文档:《Magento并发优化手册》,做好基本设置。
https://kdocs.cn/l/cc72SROjtuNr
[金山文档] White-Paper-Magento-2_0-Performance-and-Scalability-03_31_16.pdf
基本设置:

基本架构:



并发测试情况:



开始并发测试:

1,Redis作为Full page cache 的测试:

4核16g,测试结果是:Requests per second = 4-10 , waiting = 1000ms ,
性能检测结果:


发现问题: 1,sql太多。 2,magento启动太重了。





2,Varnish 是magento的救星:

magento太重,那么就尽量都不经过magento, 静态缓存内容,varnish处理高并发。
Magento 2 Varnish cache reduces the page load time and delivers content 10X faster.



3,varnish后还是很慢?

那么就检查:1,是否走varnish命中,2,检查宽带(magento页面超级大,宽带要开20m-30m)



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

checkout页:

备注: checkout url可以这样测试 https://woocommerce.liang/onestepcheckout/?sku[24-WB04]=2

因为有流量转化漏斗,这里只需要达到10分1的并发就可以。250人/min – 1000人/min , 看下图测试结果,250人/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:
放在 [S3/OSS]
参考:
https://www.mageplaza.com/kb/setup-amazon-cloudfront-cdn-in-magento-2.html


varnish 503问题?

参考:https://www.magesolution.com/blog/error-503-backend-fetch-failed-varnish/
https://magento.stackexchange.com/questions/247275/x-magento-cache-debug-miss

varnish 缓存 MISS ?

可能是代码有阻碍缓存的bug, 执行检查:

grep --recursive -l 'cacheable="false"' app/design/frontend app/code vendor

也可能是 “User-Agent” 问题:
So removing the “User-Agent” in the .htaccess fixed the issue

SetEnv dont-vary 1

varnish监控 Hit / Miss 情况 ?

shell 执行 varnishhist , | 是击中缓存, # 是不能击中。


或者shell 执行 curl 检查 hit,参考:
How to Configure Varnish for Magento 2.x | Hypernode : Home Support Documentation


varnish 中文文档

基本使用介绍:How to Boost Your Server Performance with Varnish – SitePoint
varnish 4.1中文文档 (gitbooks.io)


varnish 安装:

When you’re configuring Magento 2 Varnish, you need to check for the version compatibility factor because Magento 2 supports these Varnish versions 4.x, 5.2 or 6.2.
Follow these steps for setting up Magento 2 Varnish for your store:

  1. Install Varnish
    https://magemastery.net/blog/how-to-configure-varnish-6-and-nginx-with-ssl-for-magento-2
  2. Configure Magento Varnish
  3. Verify operation of Varnish With Magento

    参考如下文章:
    https://www.kancloud.cn/zouhongzhao/magento2-in-action/647798
    https://www.cloudways.com/blog/configure-varnish-cache/
    https://www.datadoghq.com/blog/top-varnish-performance-metrics/
    https://sodocumentation.net/varnish/topic/9072/monitoring-varnish