Linux / 宝塔面板下 PHP OPcache 完整实践指南
Linux / 宝塔面板下 PHP OPcache 完整实践指南
OPcache 是 PHP 官方提供的字节码缓存扩展,通过缓存 PHP 脚本的编译结果,提高 PHP 执行效率。本文讲解从 检测 → 开启 → 使用 → 清理 → 排查问题 的全流程,同时针对宝塔面板界面不实用或无法操作时给出解决方案。
一、什么是 OPcache
-
功能:缓存 PHP 编译后的字节码,减少重复解析,提高性能
-
优点:降低 CPU 使用率、缩短响应时间
-
注意:
- CLI 和 FPM 缓存独立
- OPcache 只缓存字节码,不缓存变量或对象数据
二、检测 OPcache 是否启用
1. Linux CLI 检测
php -m | grep opcache
- 输出
opcache
→ 已安装 - 无输出 → 需要安装
查看详细配置:
php -i | grep -i opcache
关键字段:
Zend OPcache => enabled
→ 已加载opcache.enable => On
→ 是否启用opcache.memory_consumption
→ 缓存内存大小opcache.max_accelerated_files
→ 最大缓存文件数
⚠️ CLI 显示的仅是 CLI 缓存,FPM 或 Apache 下缓存独立。
2. FPM 下检测(Web 页面)
新建 opcache_status.php
:
<?php
header('Content-Type: application/json');
if(function_exists('opcache_get_status')){echo json_encode(opcache_get_status(), JSON_PRETTY_PRINT);
}else{echo json_encode(['status'=>'OPcache 未启用']);
}
访问:
http://你的域名/opcache_status.php
可查看:
num_cached_scripts
→ 当前缓存脚本数hits
/misses
→ 缓存命中情况memory_usage
→ 内存占用
三、开启 OPcache
1. Linux 命令行方式
- 安装:
- Ubuntu / Debian:
sudo apt update
sudo apt install php-opcache
- CentOS / RHEL:
sudo yum install php-opcache
- 编辑 PHP 配置文件(FPM 或 CLI):
sudo nano /etc/php/8.1/fpm/php.ini
添加或修改:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.validate_timestamps=1
- 重启 PHP-FPM:
sudo systemctl restart php8.1-fpm
2. 宝塔面板方式
常规操作:
- 登录宝塔 → 软件管理 → PHP 设置 → PHP 扩展 → 勾选 OPcache → 保存
- 重载 PHP 或重启 PHP-FPM
- 可在设置中调整内存、最大文件数、刷新频率
界面不实用或无法操作时:
- 直接修改配置文件:面板对应 PHP 配置文件通常在
/www/server/php/版本/etc/php.ini
或/www/server/php/版本/etc/php-fpm.conf
- 重载 PHP-FPM:
# Linux 系统
sudo systemctl restart php8.1-fpm
即使宝塔面板操作界面异常或参数不显示,手动修改配置 + 重启 PHP-FPM 也能生效。
四、使用 OPcache
1. 查看缓存状态
<?php
print_r(opcache_get_status());
输出包含:
num_cached_scripts
hits
/misses
memory_usage
- 缓存的具体脚本列表
2. 清理缓存
a. 全量清理
opcache_reset();
b. 单文件清理
opcache_invalidate('/www/wwwroot/example/index.php', true);
c. 命令行清理
sudo -u www-data php /path/to/opcache_reset.php
www-data
为 FPM 用户,根据系统实际调整。
d. 重启 PHP-FPM(最彻底)
sudo systemctl restart php8.1-fpm
五、常见问题及解决方法
问题 | 原因 | 解决方法 |
---|---|---|
页面修改不刷新 | 缓存未失效 | 调整 opcache.revalidate_freq=0 或调用 opcache_invalidate() |
内存不足 | memory_consumption 太小 | 增加内存或减少缓存文件数 |
CLI 与 FPM 状态不同 | SAPI 独立缓存 | 使用 FPM 下脚本查看状态 |
OPcache 函数不存在 | 未启用 | 检查配置文件 zend_extension=opcache.so 并重启 FPM |
宝塔面板无法操作 | 界面异常或不显示 | 手动修改 php.ini 或对应 FPM 配置 + 重启 PHP-FPM |
六、小白实践建议
- 新手推荐宝塔面板开启 → 简单安全
- 界面异常时 → 手动修改配置 + 重启 PHP-FPM
- 部署新版本 → 调用
opcache_reset()
或重启 PHP-FPM - 生产环境优化 →
validate_timestamps=1
设置稍大,减少 I/O - 监控命中率 → 使用 OPcache GUI 或自制脚本查看
✅ 这样就兼顾了:
- Linux CLI 检测与操作
- 宝塔面板操作
- 界面不实用时的替代方案