该如何定位php-fpm占用cpu高的接口

php 版本#

php56.40

框架版本#

laravel5.6

问题描述?#

针对一些慢、占用高的接口优化,
php-fpm 中慢日志的接口已经全部迁移到单独的容器中了,
但是本机仍存在一些突然占用 cpu 很高的 php-fpm 进程(就是突然占用 cpu 高但一秒内基本都会释放的),请问有没有什么可以定位这些进程在请求哪个接口的工具或者方案。
看过 xhgui ,但似乎只会返回内存占用于 cpu 占用时间

所以求一种能够满足需求的工具或者方案,最好不仅限于 laravel 框架,还有存在 thinkphp 框架

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 11

升级下 laravel 版本用 Telescope

2年前 评论
Aroad (楼主) 2年前
Mutoulee

先看看高峰时的并发连接数吧,如果连接数不高,再排查接口。

2年前 评论

如果您的 PHP-FPM 进程占用了过高的 CPU,可以尝试以下几个方法来定位问题:

查看慢日志 在 PHP-FPM 配置文件中开启慢日志功能,并设置阈值,超过阈值的请求会被记录下来。可以根据慢日志来查看哪些接口响应时间过长,进而排查问题。具体操作是在 PHP-FPM 配置文件中添加以下配置:

request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/slow.log 其中 request_slowlog_timeout 表示请求处理时间超过该值的请求会被记录到慢日志中,单位为秒;slowlog 表示慢日志的路径。修改完配置文件后,重启 PHP-FPM 生效。

使用 xhprof 扩展 xhprof 是一个针对 PHP 应用程序的分层代码分析工具,可以分析 PHP 应用程序的性能瓶颈,帮助开发者找出代码中的性能问题。可以使用 xhprof 扩展来对 PHP-FPM 进程进行分析。

安装 xhprof 扩展并启用后,在需要分析的代码中插入 xhprof_enable () 函数来启动分析器。请求结束后可以将生成的分析数据导出到文件或是输出到 Web 页面中,然后再进行分析。关于 xhprof 的具体使用方法可以参考其官方文档。

使用系统工具 可以使用系统自带的 top 或 htop 命令来查看 PHP-FPM 进程的 CPU 使用情况,并找到占用 CPU 高的进程,然后使用 strace 命令或其他调试工具来分析该进程。也可以使用 perf 工具来对进程进行性能分析。

使用第三方工具 比如说 New Relic、Blackfire 等第三方监控工具,它们提供了详细的性能信息,可用于定位 PHP-FPM 进程中的性能问题。

总体而言,一旦定位到高 CPU 的接口,我们需要进行进一步的分析,包括但不限于:

调用的外部服务是否超时或出现连接池满的情况 数据库是否有索引缺失导致的查询效率低下 是否存在循环嵌套、繁重计算等问题 针对不同的情况采取不同的优化策略,逐步提升接口的性能。

2年前 评论
DonnyLiu 2年前

查看 CPU 占用率:使用 top 或 htop 命令查看服务器 CPU 占用率,并找出占用 CPU 最高的进程。通常情况下,PHP-FPM 进程的名称为 php-fpm。

查看 PHP-FPM 进程数:使用 ps 命令查看 PHP-FPM 进程数,并找出占用 CPU 最高的进程。可以使用以下命令查看 PHP-FPM 进程数:ps aux | grep php-fpm

查看 PHP-FPM 日志:使用 PHP-FPM 的错误日志和慢日志,查看是否有接口请求出现异常或者执行时间过长的情况。可以在 PHP-FPM 的配置文件中设置错误日志和慢日志的路径和级别,例如:

error_log = /path/to/php-fpm/error.log slowlog = /path/to/php-fpm/slow.log request_slowlog_timeout = 10s 这样可以记录 PHP-FPM 进程的错误和慢请求,并帮助我们定位问题。

2年前 评论

升级 PHP 到 7.4 吧

2年前 评论
Aroad (楼主) 2年前

可以监控下 PHPfpm 状态,配置一下 NGINX,看下 fpm 进程数是不是有大量请求进来不够了,少了就扩设备或者增大进程数

2年前 评论
Aroad (楼主) 2年前
raybon (作者) 2年前