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 几秒才能打开,这种情况请大神指点
202
skys215 2022-05-27 10:40:15 +08:00
用了 select *吗?避免吧…
|
203
pangpre 2022-05-27 10:40:47 +08:00 via iPhone
1. 试试 webman ,你代码稍微改动下,就可以签过去,他是长连接 mysql 的,是常驻内存的。你们可以压测下看看。 2.简单笨方法 每台 web 上装一个 mysql 空闲时间再汇总。 甚至可以降低配置,多搞几台这样干。 3.高逼格的 缓存 队列 微服务 cdn 都用下 4.建议以后 php 框架都用 webman ,心智负担很小,性能提升百倍,而且真开源的,绝没吃相难看之说。laravel 之类的,跟不上了
|
204
R18 2022-05-27 10:52:11 +08:00
确实 opcache 已经成了 php 必不可少的扩展了,最近一个新项目服务器一直 cpu100% 全是 fpm 占用,装了 opcache 占用没超过 50%
|
205
star7th 2022-05-27 15:05:03 +08:00
看了附言,难道你之前一直开着 larave 的 debug 模式? 天啊,debug 模式加载各种东西,还要写日志等等,比正常情况下慢好几倍。这种基础错误怎么可以犯。任何框架上线都要关闭开发模式,这是常识
|
206
KyoPi 2022-05-27 15:29:48 +08:00
对数据实时性要求不高的写可以用多队列,频繁的读可以放缓存里,剩下就是数据索引 /nginx/apache 等等的优化了
|
207
huigeer 2022-05-27 17:12:48 +08:00
看来还是数据库的锅,换成带长连接的 laravel 配置,rds 的连接数配置加上去
|
208
GeorgeGalway 2022-05-27 17:17:36 +08:00
@lmmlwen 我是一条条评论从下看到上,看到你回复的笑喷了,我也 Mark 一下
|
212
MCyunpeng98 2022-05-27 17:58:27 +08:00
@minuo0day OP 考虑重新发个帖子,说说你们是怎么优化的不
|
213
byte10 2022-05-27 18:40:18 +08:00
关于 QPS ,回答大家一下,崩的时候 QPS 才 7K 多,崩的原因是请求数过高,瞬时 1 万 5 ,导致 CPU 过载?
我想请教一下 瞬时 1.5W ,那么一秒是多少 w ?如果一秒涌入 1.5 个请求,没啥大问题吧。最多也就是慢,cpu 负载高,只是会导致处理慢,只要逻辑正常 进程不会挂的吧? |
214
minuo0day OP @byte10 我们有个采集点调用那块,之前程序是写了个递归调用,导致机器人一直在跑,也就是说是自己把自己给干挂了
|
215
Outshine 2022-05-28 01:07:48 +08:00 1
v2 现在什么风气,正经来寻求一个问题的解决方法,非要扯语言问题引战。
看了楼里很多人说用 go 重构的,等你重构完,要么楼主先被开了,要么疫情先结束了 |
216
byte10 2022-05-28 08:11:06 +08:00
@minuo0day 嗯了解。那些说框架性能的问题基本不用理会的。在 java 领域,netty 可能比 tomcat 快一半 50%。但是实际加上业务代码 差距不会超过 20%,因为业务代码的带来的性能消耗非常大,光看框架有鸡毛用。业务代码才是性能的杀手。比如-同等 qps 下 cpu 消耗 netty : tomcat = 10:20 。但是加上业务代码之后,netty+ business : tomcat + business = 10 + 100 : 20 + 100 = 110 : 120 。 但是很多小白一上来就说框架的问题,缺少基本的判断能力和实战经验。
框架的除非设计非常的烂,不然不可能会是因为框架 影响到整个性能,换框架带来的性能一般不超过 20%。当然除非你的业务是非常的轻量级的,那么框架带来的影响还是比较大的。 |
217
minuo0day OP @byte10 说到底,还是时间太赶,某一块的业务逻辑按照惯性写了,没有好好测和检查,这种的民生类的项目出了问题,自己内心也很愧疚
|
218
liuyibao 2022-05-29 12:22:09 +08:00 1
其实 FPM+OpCache 真的是很稳的,并发很能抗。很多人上来就鼓吹、协程啥的,我倒是看了很多人写的协程 bug 一堆。PHP 的定位其实是很准的,就是用简单的办法,低成本的办法把一些事情做好。
|
219
NoahVI 2022-09-09 14:23:14 +08:00
先看下是不是数据库的原因,如果不是的话。框架换成常驻内存的应该能解决问题
|
220
LDJea 2023-04-11 16:40:26 +08:00
抛弃引战的,楼里一些大佬的思路值得学习
|