如何配置PHP 7.4 OPCache统计缓存命中?为何命中数为0?
问题描述
在运行PHP-FPM的容器中执行以下命令:
$ php -a php > print_r(opcache_get_status());
得到的OPCache状态结果里,opcache_statistics下的hits值为0,num_cached_scripts也为0。想知道缓存命中数为0的原因,是查看位置不对、配置有问题吗?
原因分析与解决办法
- 查看对象错误:你用
php -a启动的是CLI模式PHP,而业务服务依赖的是PHP-FPM进程——这二者是完全独立的进程实例,各自维护独立的OPCache缓存池。你现在查询的是CLI模式的OPCache状态,根本不是FPM进程的缓存数据,所以自然看不到命中记录和缓存脚本数。 - FPM的OPCache可能未正确配置:就算找对了查看位置,也可能存在配置问题:
- 检查PHP-FPM对应的配置文件(
php.ini或FPM专属配置文件),确保opcache.enable=1(CLI模式的opcache.enable_cli可以设为0,不影响FPM)。 - 确认
opcache.memory_consumption、opcache.max_accelerated_files等参数设置合理,避免缓存空间不足或无法容纳脚本。 - 如果配置了
opcache.restrict_api,要确保当前获取状态的请求符合权限限制,否则无法读取完整状态。
- 检查PHP-FPM对应的配置文件(
- 正确查看FPM的OPCache状态的方法:
- 编写一个简单的PHP脚本(比如
opcache-status.php):<?php print_r(opcache_get_status()); ?> - 将脚本放到FPM服务的网站根目录,通过浏览器访问或
curl命令请求该脚本,得到的才是FPM进程的OPCache状态数据。 - 也可以在容器内执行
php-fpm -i | grep opcache,直接查看FPM模式下的OPCache配置参数,确认配置是否生效。
- 编写一个简单的PHP脚本(比如
内容的提问来源于stack exchange,提问作者Gabriel Stein
相关产品推荐
相关产品推荐

