讨论数量:
可以监控下htop ,看下是哪个进程比较高,然后再详细跟踪,sql 可能是一个问题,fpm 这个你看下你的启动了多少,一个大概20M内存,40登录,你看下最大启动了多少,这样子算一下,如果只是cpu 高,查mysql ,内存高,去找 fpm问题
首先无脑开启opencache并优化参数,其次调整fpm配置,楼上说fpm静态,如果不清楚会有多少请求还是建议动态,再者就是业务里面的逻辑是? 每次请求发送同步发送很多短信? 该异步处理的就异步处理 通常能解决大部分问题
发送短信的时候写个队列吧,做下并发控制,昨天做大文件上传的时候浏览器并发高也会卡死,后面就写了个队列做并发控制,简单的队列思路还是很简单的,大致就3个动作:定时器,队列结束,任务结束。php 的话可以结合 redis 写
很高兴能回答你的问题,你这边 是 40个用户 登录 ,然后批量导入用户,然后进行发送 短信吧。首先优化批量导入的问题,然后优化 发送短信采用定时任务发送。按照你现在程序 猜测,应该是 导入excel的时候在发送短信,长住内存 大,导致数据库处于长链接状态。 总结,优化发送短信的手机号导入机制,发送机制采用定时任务。 就能解决你的问题。
这个需要从多个方面分析。
- 开启 mysql 慢日志记录,看你的mysql cpu占比挺高的,有可能是没有使用到索引,mysql查询压力大,优化索引,在你的业务中增加缓存层较少mysql的压力。
- 开启php慢日志,代码中可能存在问题,通过慢日志定位。
- 开启opcache 优化 php-fpm 进程,减少cpu开销。
- 有条件跟踪一下占比较大的cpu进程,通过 strace 命令追踪定位分析,通过 proc 进程目录找到执行文件,定位优化问题。
从截图上看,不同时段占用 cpu 的进程较多的进程也不一样。 mysqld 占得多的时候,建议开 sql 日志查一下,负载升高时段的查询,有没有可优化的余地。php-fpm 占的多的时候,建议开请求日志看一下,负载升高时段集中在哪些请求。
我们的经验来看,mysql 服务在业务量大的时候很容易拉高负载,建议将 mysql 服务单独迁移出去,避免不同服务之间的相互影响。
推荐文章: