关于 PHP 高并发,请教各位

2022-05-26 09:53:36 +08:00
 minuo0day

H5 页面的核酸系统,前后端分离,前端 VUE ,后端 PHP 自己搭的 larave 框架,数据库 mysql,Nginx , 三台负载均衡的天翼云应用服务器,都是 32 核 64G ,一台数据库服务器 16 核 32G ; 基本业务逻辑: 用户端,进入页面绑定自己身份证号手机号乡镇信息等个人信息,前端凭借身份证号直接生成个人二维码,向医护人员出示二维码,1 个小时需要做 40 万人口的核酸; 医护端,手机号身份证号登录或者申请,登入先选采集点,扫开箱码,再扫试管码选择十合一或二十合一,再点击添加人员打开扫一扫扫居民个人码添加;

24 日早上 4 点 30 ,医护人员开始大量的开始进入程序扫箱码开箱,并在后台开始大量的添加临时采集点,于 4 点 58 分,CPU 使用率 100%,系统崩溃,日志显示,瞬间请求数 1 万 4 ,重启在进入还是崩;

24 日下午系统整体挪到阿里云服务器,也是三台负载均衡的服务器,三台 32 核 64G ,加了 OSS ,用了阿里云的云数据库 RDS 版,主实例 8 核 16G ,只读数据库服务器 8 核,压测 10 分钟 15 万人,和 4000 医护人员同时在线也崩了,数据库和应用服务器的 CPU 利用率都打到了 100%,为了保障第二天不出问题,临时调大了一台应用服务器调到了 52 核,并同时把读写的两台数据库服务器都调到了最大 104 核,第二天检测才扛过去。

问:我们虽然调大了服务器的配置,但调大以后压测 10 分钟 20 万人和 4000 医护在线,服务器承载 20%都上不去,但前端页面会变得非常慢,基本上 10 几秒才能打开,这种情况请大神指点

18545 次点击
所在节点    PHP
220 条回复
des
2022-05-26 10:35:48 +08:00
全是主观描述,多来点实际数据,不然不好给你看
参考具体 #32 说的指标
liuxu
2022-05-26 10:38:22 +08:00
php:慢接口的 xhprof/tideways 输出给一下
系统 /linux: dstat 压测下和非压测下的输出给一下,dstat -amsy 1 30
sarices
2022-05-26 10:41:39 +08:00
其实很多时候都是数据库问题,试试优化数据库方式着手
还有前端应该上 cdn
dzdh
2022-05-26 10:41:51 +08:00
打开 fpmstatus 看看
redford42
2022-05-26 10:44:00 +08:00
巅峰时期抓包看一下前端是慢在哪
LexLuth0r
2022-05-26 10:49:38 +08:00
现阶段可以考虑用 swoole 扩展一下,推荐 https://github.com/hhxsv5/laravel-s ,高并发还是推荐用 go
whcoding
2022-05-26 10:51:10 +08:00
紧急的话可以先加上 https://github.com/hhxsv5/laravel-s 这样可以先抗住了.. 然后再加上缓存尤其是二维码那块
skymei
2022-05-26 10:53:31 +08:00
根据你的描述,PHP 应用服务器的问题不大,问题可能出现在前端资源加载和数据库上,前端资源走 cdn ,数据库的 sql 分析一下,应该能找到一些突破点
icanbeyrhero
2022-05-26 10:54:49 +08:00
用多台小机器,而不是一台大机器,性能是不是好点?
yEhwG10ZJa83067x
2022-05-26 10:59:29 +08:00
带宽没跑满,服务器配置也够,我盲猜数据库吧,慢日志看看卡在哪里了
barbery
2022-05-26 10:59:57 +08:00
数据库都跑满了?我怀疑是短链接太多了导致的,建议你开代理池,这个阿里云本身就有的付费项目,减少频繁创建连接,数据库 cpu 下来之后,那剩下的就简单了,横向扩展,动态扩容加应用服务器,动态扩容也是阿里云自带的服务
yEhwG10ZJa83067x
2022-05-26 11:00:55 +08:00
@icanbeyrhero #49 是的,不能只是纵向扩展,抗并发尽量横向扩展
hahasong
2022-05-26 11:01:43 +08:00
前端资源放到 CDN ,后台上几层缓存,db 查询读缓存,写入放队列慢慢写。再上个容器负载均衡。不信这还扛不住
ivanfjz
2022-05-26 11:02:28 +08:00
laravel 虽然慢, 但也没那么差, 个人觉得更大的可能性是数据库的问题
你们既然买了 rds,看下 rds 的性能分析, 看看什么 sql 语句导致的 cpu100%. 数据库慢, 会反向导致 php 服务器卡住爆满崩掉.
如果自己分析不出来, 联系阿里云运维客户, 让他们帮你们分析
cooper
2022-05-26 11:02:42 +08:00
跟我们的场景有点像
先上改成 https://laravel.com/docs/9.x/octane ,低版本用 laravel-s ;
数据库改 PolarDB ;
服务器这块改成 K8S 定时伸缩 ,方便还能省不少钱。
rming
2022-05-26 11:09:52 +08:00
php 的性能没这么拉吧,问题应该在数据库,前面说的性能优化做到位,数据库缓存读,队列写,合并读写,看下 mysql slow query log 就知道了
47d7tEUBp521E8fJ
2022-05-26 11:11:42 +08:00
装个 laravel-s
rming
2022-05-26 11:12:35 +08:00
“服务器承载 20%都上不去,但前端页面会变得非常慢”,查一下 LBS 出口带宽,后端机器硬盘读写,fpm slow log, mysql slow log
thinkwei2012
2022-05-26 11:14:36 +08:00
1 、先检查数据库日志,定位下慢查询(数据库连接数满)
2 、Nginx 配置检查 gzip 压缩、静态资源过期设置(防止回源问题带来的压力)
3 、php-fpm ,进程静态配置很重要,Opcache 一定要开启来,慢日志问题也要定位解决(查找代码计算量大的问题点)
4 、前端静态资源必上 CDN ,回源 OSS 是最好的
statumer
2022-05-26 11:14:43 +08:00
这和 PHP 性能有什么关系? PHP 这部分 100%是个无状态服务,为什么你们在搞纵向扩展而不是横向扩展?非常令人疑惑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX