1. 首页 > 技术教程 > 正文

PHP 加速器:开启 OPcache 与执行时间优化技巧

PHP 加速器:开启 OPcache 与执行时间优化技巧

网站响应慢?PHP 程序跑得像蜗牛?90% 的情况是没开 PHP 加速器。主机选这篇 Linux 教程直接教你怎么开启 OPcache 和优化执行时间,老鸟都在用的实战技巧,照着做就能让 PHP 性能翻倍。

PHP 加速器:开启 OPcache 与执行时间优化技巧的图片

为什么 PHP 加速器是性能瓶颈的关键

PHP 是解释型语言,每次请求都要重新编译脚本。OPcache 能把编译后的字节码缓存到内存里,省掉重复编译的时间。没开 OPcache,你的服务器等于在裸奔干活。

不开启 OPcache 的后果

• CPU 利用率飙升,尤其在高并发场景下,PHP-FPM 进程直接占满。

• 内存浪费,每次请求都重复加载相同的 PHP 文件。

• 响应时间变长,用户刷新页面体验极差。

开启 OPcache 的详细步骤

检查是否已安装 OPcache

先看下 PHP 扩展里有没有 OPcache,别急着改配置。

php -m | grep opcache

如果输出 opcache,说明已安装;否则需要安装

安装 OPcache(以 PHP 7.4 为例)

不同发行版安装命令不同,Debian/Ubuntu 和 CentOS 有区别。

Debian/Ubuntu 系统

sudo apt install php7.4-opcache

CentOS/RHEL 系统

sudo yum install php-opcache

配置 OPcache 参数

编辑 php.ini,通常在 `/etc/php/7.4/cli/php.ini` 或 `/etc/php/7.4/fpm/php.ini`。

ini
[opcache]
opcache.enable=1

开启 OPcache,1 表示启用

opcache.memory_consumption=128

缓存内存大小,单位 MB,128MB 够用

opcache.max_accelerated_files=4000

最大缓存文件数,根据项目文件量调整

opcache.revalidate_freq=60

检查文件更新的间隔,单位秒,60 秒检查一次

opcache.fast_shutdown=1

启用快速关闭,减少内存释放开销

重启 PHP-FPM 生效

sudo systemctl restart php7.4-fpm

重启 PHP-FPM 服务,让配置生效

执行时间优化技巧

除了 OPcache,执行时间限制也是低效的常见原因。很多脚本默认 30 秒超时,大文件处理或复杂计算时直接断掉。

调整 max_execution_time

在 php.ini 中修改:

ini
max_execution_time = 300

设置脚本最大执行时间为 300 秒,适合长时间任务

使用 set_time_limit 函数

在代码中动态调整,比改全局配置更灵活。

php
set_time_limit(0);
// 0 表示不限制时间,慎用

结合 OPcache 优化内存

优化执行时间时,别忘了 OPcache 的内存占用。如果内存太小,OPcache 会频繁淘汰缓存。

ini
opcache.memory_consumption=256

内存充足时,可以提高到 256MB

opcache.interned_strings_buffer=16

字符串缓存,减少重复字符串的内存占用

常见排障:开启后没效果怎么办?

现象一:OPcache 已开启,但页面加载没变化

检查 OPcache 是否真的生效:

php -r "echo opcache_get_status()['opcache_enabled'];"

输出 1 表示生效,0 表示未生效

如果返回 0,大概率是 php.ini 路径不对。用 `php –ini` 确认加载的是哪个文件。

现象二:修改 PHP 文件后,页面还是旧版本

OPcache 默认缓存 60 秒,改完文件后等 60 秒再刷新。或者手动清缓存:

php -r "opcache_reset();"

清除 OPcache 缓存,立即生效

现象三:PHP-FPM 报错“Unable to allocate memory for pool”

这是 OPcache 内存设置太大,服务器内存不够。降低 `opcache.memory_consumption` 值,比如改成 64MB。

老鸟叮嘱:一个高风险操作

别在生产环境直接改 `max_execution_time=0`。不限制时间意味着脚本可以无限跑,一旦死循环,PHP-FPM 进程直接挂掉,整个网站瘫痪。除非你明确知道自己在干什么,否则用 `set_time_limit(0)` 配合 try-catch 更安全。

FAQ

PHP OPcache 开启后,修改代码需要重启服务器吗?

不需要重启服务器,但需要等缓存过期(默认 60 秒)或手动执行 `opcache_reset()` 清缓存。

Linux SSH 连不上怎么办?

先检查防火墙端口是否放行,再用 `systemctl status sshd` 看 SSH 服务状态,最后看 `/var/log/auth.log` 日志。

VPS 防火墙端口放行后还是访问不了是什么原因?

检查云平台的安全组规则是否也放行了端口,很多 VPS 厂商有两层防火墙:系统防火墙和云平台安全组,都要配置。

PHP 执行时间超时怎么解决?

修改 php.ini 的 `max_execution_time`,或者用 `set_time_limit(60)` 在代码中临时延长。如果持续超时,检查是否有死循环。

BBR 开启后为什么速度没有明显提升?

BBR 只优化 TCP 拥塞控制,如果瓶颈在 PHP 执行效率或数据库查询,开启 BBR 没用。先优化 OPcache 和 SQL 查询。

Linux 小白可以直接用 root 账号操作吗?

不建议。日常操作用普通用户加 sudo,避免误删系统文件。配置 PHP 时用 `sudo vi /etc/php/7.4/fpm/php.ini` 即可。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9542.html 商家投稿邮箱:zhujixuanblog@qq.com