启用 opcache.huge_code_pages=1 需系统已分配2MB大页(如sudo sysctl vm.nr_hugepages=128)且PHP用GCC 4.8+编译;PHP 8.6默认支持,但需在php.ini中配置opcache.huge_code_pages=1并验证opcache_get_status()'memory_usage'为2097152。

启用 opcache.huge_code_pages=1 需要两个前提:系统已分配大页内存(HugePages),且 PHP 是用支持该特性的编译器(GCC 4.8+)构建的。PHP 8.6 默认支持,但若未开启,说明底层未就绪。
确认系统已启用 HugePages
Linux 系统需预先分配足够数量的 2MB 大页(常见大小),不能仅靠配置 PHP 就生效:
- 执行命令分配 128 个大页:
sudo sysctl vm.nr_hugepages=128 - 验证是否成功:
cat /proc/meminfo | grep -i huge,应看到类似HugePages_Total: 128和Hugepagesize: 2048 kB - 为避免重启后失效,可将
vm.nr_hugepages=128写入/etc/sysctl.conf
在 php.ini 中启用 huge_code_pages
确保 OPcache 已启用,再添加关键参数:
- 确认已启用扩展:
zend_extension=opcache.so - 开启 OPcache:
opcache.enable=1 - 启用大页支持:
opcache.huge_code_pages=1 - 建议同步设置足够内存:
opcache.memory_consumption=256(单位 MB)
验证是否生效
重启 PHP-FPM 或 Apache 后,运行以下 PHP 脚本检查:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
若输出为 2097152(即 2MB),说明 huge_code_pages 已成功启用;若为 0 或报错,则表示系统未分配大页或 PHP 未识别到该特性。
注意事项
该选项仅对 x86_64 架构有效;部分容器环境(如默认 Docker)不支持 HugePages,需显式配置 --privileged 或挂载 /proc/sys/vm/nr_hugepages;启用后 OPcache 内存会优先尝试使用大页,失败时自动回退,不影响正常运行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










