You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位Laravel/ThinkPHP框架下PHP-FPM高CPU占用的API?

定位PHP-FPM高CPU进程对应请求的方案

1. 系统工具+PHP-FPM状态页快速定位

  • 用top或htop找出CPU占比高的php-fpm进程PID
  • 开启PHP-FPM状态页:编辑php-fpm配置文件(如www.conf),设置pm.status_path = /status,并在Web服务器(Nginx/Apache)配置允许访问该路径
  • 执行curl 127.0.0.1/status?full,输出结果里找到目标PID对应的request_uri字段,直接定位到请求接口
  • 进阶补充:用strace -p <PID>跟踪进程系统调用,查看它的文件读写、网络请求等行为,辅助判断接口逻辑瓶颈

2. 配置PHP-FPM带PID的访问日志

  • 编辑php-fpm的www.conf,开启并配置访问日志:
    access.log = /var/log/php-fpm/www-access.log
    access.format = "%{%Y-%m-%d %H:%M:%S}t %P %R %u %m %r"
    
    其中%P是进程PID,%r是完整请求URI,%m是请求方法
  • 出现高CPU进程时,直接在日志文件中搜索对应PID,即可找到该进程正在处理的请求

3. 框架全局中间件埋点日志

  • 在Laravel或ThinkPHP中添加全局中间件,记录当前进程PID与请求URI:
    // Laravel 中间件示例
    public function handle($request, Closure $next)
    {
        $pid = getmypid();
        \Illuminate\Support\Facades\Log::info("PID {$pid} 处理请求: {$request->fullUrl()}");
        return $next($request);
    }
    
    // ThinkPHP 中间件示例
    public function handle($request, \Closure $next)
    {
        $pid = getmypid();
        \think\Log::info("PID {$pid} 处理请求: {$request->url(true)}");
        return $next($request);
    }
    
  • 当出现高CPU进程时,直接在框架日志中搜索PID,快速定位对应请求

4. 用phpspy实时跟踪进程代码执行

  • 安装phpspy(无需编译PHP,直接下载二进制包),执行phpspy -p <目标PID>
  • 工具会实时输出该进程的PHP函数调用栈,从栈信息可以直接反推对应的控制器、方法,进而定位到具体接口

内容的提问来源于stack exchange,提问作者Aroad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:05:10