深入分析PHP Opcache工作原理

PHP项目中,尤其是在高并发大流量的场景中,如何提升PHP的响应时间,是一项十分重要的工作。

而Opcache又是优化PHP性能不可缺失的组件,尤其是应用了PHP框架的项目中,作用更是明显。

1. 概述

在理解 OPCache 功能之前,我们有必要先理解PHP-FPM + Nginx 的工作机制,以及PHP脚本解释执行的机制。

1.1 PHP-FPM + Nginx 的工作机制

请求从Web浏览器到Nginx,再到PHP处理完成,一共要经历如下五个步骤:

第一步:启动服务

  • 启动PHP-FPM。PHP-FPM 支持两种通信模式:TCP socket和Unix socket;
  • PHP-FPM 会启动两种类型的进程:Master 进程 和 Worker 进程,前者负责监控端口、分配任务、管理Worker进程;后者就是PHP的cgi程序,负责解释编译执行PHP脚本。
  • 启动Nginx。首先会载入 ngx_http_fastcgi_module 模块,初始化FastCGI执行环境,实现FastCGI协议请求代理
  • 这里要注意:fastcgi的worker进程(cgi进程),是由PHP-FPM来管理,不是Nginx。Nginx只是代理

第二步:Request => Nginx

  • Nginx 接收请求,并基于location配置,选择一个合适handler
  • 这里就是代理PHP的 handler

第三步:Nginx => PHP-FPM

  • Nginx 把请求翻译成fastcgi请求
  • 通过TCP socket/Unix Socket 发送给PHP-FPM 的master进程

第四步:PHP-FPM Master => Worker

  • PHP-FPM master 进程接收到请求
  • 分配Worker进程执行PHP脚本,如果没有空闲的Worker,返回502错误
  • Worker(php-cgi)进程执行PHP脚本,如果超时,返回504错误
  • 处理结束,返回结果

第五步:PHP-FPM Worker => Master => Nginx

  • PHP-FPM Worker 进程返回处理结果,并关闭连接,等待下一个请求
  • PHP-FPM Master 进程通过Socket 返回处理结果
  • Nginx Handler顺序将每一个响应buffer发送给第一个filter → 第二个 → 以此类推 → 最终响应发送给客户端

1.2 PHP脚本解释执行的机制

了解了PHP + Nginx 整体的处理流程后,我们接下来看一下PHP脚本具体执行流程,

首先我们看一个实例:

<?php
if (!empty($_POST)) {
    echo "Response Body POST: ", json_encode($_POST), "
";
}

if (!empty($_GET)) {
    echo "Response Body GET: ", json_encode($_GET), "
";
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 深入分析PHP Opcache工作原理