问答 / 0 / 23 / 创建于 1年前
8.5
PHP 版本:8.2
php-fpm 版本:7.4
OpenCloudOS 8.6.2205 x86_64(Py3.7.8)
mysql8nginx1.2
4h8g amdCPU服务器,只要有40多用户在用就很卡,是一个短信网站并发多,每天都要重启服务器好几次是我的FPM设置有问题吗,只要在用就很卡,不用就没事,
并发高,试试 削峰填谷策略,用队列处理
确实不能用队列,可以试试 serverless
可以监控下htop ,看下是哪个进程比较高,然后再详细跟踪,sql 可能是一个问题,fpm 这个你看下你的启动了多少,一个大概20M内存,40登录,你看下最大启动了多少,这样子算一下,如果只是cpu 高,查mysql ,内存高,去找 fpm问题
FPM 改为使用静态模式试试。
请问最后一张图那些优化建议是什么软件的?
并发扛不住的话,考虑异步的任务用队列呢
首先无脑开启opencache并优化参数,其次调整fpm配置,楼上说fpm静态,如果不清楚会有多少请求还是建议动态,再者就是业务里面的逻辑是? 每次请求发送同步发送很多短信? 该异步处理的就异步处理 通常能解决大部分问题
实在不行就做负载均衡
发送短信的时候写个队列吧,做下并发控制,昨天做大文件上传的时候浏览器并发高也会卡死,后面就写了个队列做并发控制,简单的队列思路还是很简单的,大致就3个动作:定时器,队列结束,任务结束。php 的话可以结合 redis 写
40 多用户算什么并发啊,应该是代码或者配置问题 多检查吧
很高兴能回答你的问题,你这边 是 40个用户 登录 ,然后批量导入用户,然后进行发送 短信吧。首先优化批量导入的问题,然后优化 发送短信采用定时任务发送。按照你现在程序 猜测,应该是 导入excel的时候在发送短信,长住内存 大,导致数据库处于长链接状态。 总结,优化发送短信的手机号导入机制,发送机制采用定时任务。 就能解决你的问题。
这个需要从多个方面分析。
应该是短信发送占用了太多php-fpm进程吧,是的话可以把要发送的短信放队列里,一个一个执行
从截图上看,不同时段占用 cpu 的进程较多的进程也不一样。 mysqld 占得多的时候,建议开 sql 日志查一下,负载升高时段的查询,有没有可优化的余地。php-fpm 占的多的时候,建议开请求日志看一下,负载升高时段集中在哪些请求。
我们的经验来看,mysql 服务在业务量大的时候很容易拉高负载,建议将 mysql 服务单独迁移出去,避免不同服务之间的相互影响。
cpu高,感觉是代码问题,如果是发送短信,fpm下是io等待多,cpu不会高的。
有开opcache吗?
40个用户登陆,mysql占用过高,这个其实有点像发生了n+1
php8.2, fpm的版本为什么不保持一致,坚持fpm7.4的原因是什么?
你的并发方案 只用了1G内存,看提示说1个子进程占用20M左右内存,40个那么就差不多是1G了。
laravelS试试啦
我要举报该,理由是:
并发高,试试 削峰填谷策略,用队列处理
确实不能用队列,可以试试 serverless
可以监控下htop ,看下是哪个进程比较高,然后再详细跟踪,sql 可能是一个问题,fpm 这个你看下你的启动了多少,一个大概20M内存,40登录,你看下最大启动了多少,这样子算一下,如果只是cpu 高,查mysql ,内存高,去找 fpm问题
FPM 改为使用静态模式试试。
请问最后一张图那些优化建议是什么软件的?
并发扛不住的话,考虑异步的任务用队列呢
首先无脑开启opencache并优化参数,其次调整fpm配置,楼上说fpm静态,如果不清楚会有多少请求还是建议动态,再者就是业务里面的逻辑是? 每次请求发送同步发送很多短信? 该异步处理的就异步处理 通常能解决大部分问题
实在不行就做负载均衡
发送短信的时候写个队列吧,做下并发控制,昨天做大文件上传的时候浏览器并发高也会卡死,后面就写了个队列做并发控制,简单的队列思路还是很简单的,大致就3个动作:定时器,队列结束,任务结束。php 的话可以结合 redis 写
40 多用户算什么并发啊,应该是代码或者配置问题 多检查吧
这个需要从多个方面分析。
应该是短信发送占用了太多php-fpm进程吧,是的话可以把要发送的短信放队列里,一个一个执行
从截图上看,不同时段占用 cpu 的进程较多的进程也不一样。 mysqld 占得多的时候,建议开 sql 日志查一下,负载升高时段的查询,有没有可优化的余地。php-fpm 占的多的时候,建议开请求日志看一下,负载升高时段集中在哪些请求。
我们的经验来看,mysql 服务在业务量大的时候很容易拉高负载,建议将 mysql 服务单独迁移出去,避免不同服务之间的相互影响。
cpu高,感觉是代码问题,如果是发送短信,fpm下是io等待多,cpu不会高的。
有开opcache吗?
40个用户登陆,mysql占用过高,这个其实有点像发生了n+1
php8.2, fpm的版本为什么不保持一致,坚持fpm7.4的原因是什么?
你的并发方案 只用了1G内存,看提示说1个子进程占用20M左右内存,40个那么就差不多是1G了。
laravelS试试啦