fpm 如何快速定位到阻塞函数
每天被旁边的主管盯得死死的都没空梳理,趁他请假简单梳理下系统
我们的技术栈
php7.3 + laravel5.5(lts)
遇到的问题
普遍项目性能瓶颈在于数据库I/O
在传统fpm中这一点可能表现的更明显一点
一般来说遇到比较慢的接口是从优化单条SQL的角度去着手
但是通常执行时间为5s以内的sql,在系统内就表现的巨慢
究其根本还是因为fpm是阻塞执行的,在执行mysql时会阻塞其他sql执行 同一worker内的都会受到影响
通常遇到一条慢SQL,整个系统性能都会直线下降
有什么办法可以直接定位到耗时执行的底层函数从而快速定位到原因
在每条SQL都突然变慢的情况下,很难找出导致所有SQL性能拉胯的罪魁祸首
有什么好用的工具或命令求推荐
本作品采用《CC 协议》,转载必须注明作者和本文链接
建议把 fpm 和 数据库的 慢日志都打开,然后结合日志来看当时的时间都耗在哪里。
Strace
mysql查看查询链接耗时,结合语句定位代码
直接去云服务器上看下慢sql即可
大部分慢都是IO问题 查sql redis http
mysql的性能并不弱,但是往往就是PHP框架过度封装,虽然写代码方便了,但是却导致程序臃肿运行缓慢。传统php-fpm的运行方式,不支持数据库连接池,也是导致程序运行慢的原因。当然复杂的sql也是一方面,优化sql,重新设计索引,也是优化的方案之一,如果是小项目,一般业务接口考虑0.5秒之内返回,所以,sql执行时间应该小于0.5秒,5s那种接口太多,就需要考虑换类似于easyswoole这些支持数据库连接池的PHP框架了,甚至换其他开发语言,比如java来实现。
感谢大佬们回复 加了索引 从5s降到了2s 已经好很多了
opentrack监控,效果可以看一下我发的最新的帖子