fpm 如何快速定位到阻塞函数

每天被旁边的主管盯得死死的都没空梳理,趁他请假简单梳理下系统

我们的技术栈#

php7.3 + laravel5.5(lts)

遇到的问题#

普遍项目性能瓶颈在于数据库 I/O
在传统 fpm 中这一点可能表现的更明显一点
一般来说遇到比较慢的接口是从优化单条 SQL 的角度去着手
但是通常执行时间为 5s 以内的 sql,在系统内就表现的巨慢
究其根本还是因为 fpm 是阻塞执行的,在执行 mysql 时会阻塞其他 sql 执行 同一 worker 内的都会受到影响
通常遇到一条慢 SQL,整个系统性能都会直线下降
有什么办法可以直接定位到耗时执行的底层函数从而快速定位到原因
在每条 SQL 都突然变慢的情况下,很难找出导致所有 SQL 性能拉胯的罪魁祸首
有什么好用的工具或命令求推荐

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12
sanders

建议把 fpm 和 数据库的 慢日志都打开,然后结合日志来看当时的时间都耗在哪里。

1年前 评论

mysql 查看查询链接耗时,结合语句定位代码

1年前 评论

直接去云服务器上看下慢 sql 即可

1年前 评论
panda-sir

大部分慢都是 IO 问题 查 sql redis http

1年前 评论

mysql 的性能并不弱,但是往往就是 PHP 框架过度封装,虽然写代码方便了,但是却导致程序臃肿运行缓慢。传统 php-fpm 的运行方式,不支持数据库连接池,也是导致程序运行慢的原因。当然复杂的 sql 也是一方面,优化 sql, 重新设计索引,也是优化的方案之一,如果是小项目,一般业务接口考虑 0.5 秒之内返回,所以,sql 执行时间应该小于 0.5 秒,5s 那种接口太多,就需要考虑换类似于 easyswoole 这些支持数据库连接池的 PHP 框架了,甚至换其他开发语言,比如 java 来实现。

1年前 评论
jiangjun 1年前

感谢大佬们回复 加了索引 从 5s 降到了 2s 已经好很多了

1年前 评论
putyy 1年前
putyy 1年前
zds

opentrack 监控,效果可以看一下我发的最新的帖子

1年前 评论
晏南风 (楼主) 1年前