【发布时间】:2014-04-18 04:38:25
【问题描述】:
PHP 5.5 的 OPcache 扩展已在我的(共享)网络主机上启用,但由于某种原因,它总是在统计信息中报告“0 次点击”。会不会是因为不兼容suPHP?
或者任何人对为什么有 0 次缓存命中有任何其他建议?
【问题讨论】:
PHP 5.5 的 OPcache 扩展已在我的(共享)网络主机上启用,但由于某种原因,它总是在统计信息中报告“0 次点击”。会不会是因为不兼容suPHP?
或者任何人对为什么有 0 次缓存命中有任何其他建议?
【问题讨论】:
可以为 CLI 和基本 GCI 轻松启用 OPcache,但除非 PHP 进程在多个请求中持续存在,否则您只会在 人为 场景中看到缓存命中 - 例如在同一个请求中多次编译同一个脚本时。 (我说做作,因为这样的脚本无法定义全局命名空间实体,例如类或函数,因为第二次和后续编译会失败。)
在大多数共享主机配置中,系统管理员会将 PHP 配置为一次性 php-cgi 执行,即 PHP 映像在托管帐户 UID 内基于每个请求启动。这具有简单和安全的优点。这也有性能差的缺点,因为 PHP 映像启动开销是在每个请求的基础上产生的,并且由于 mmap 的 SMA 在映像关闭时被丢弃,所以任何编译的脚本都不会在请求之间持续存在。
要使 OPcache 正常工作,您需要有能够在请求爆发时持续存在的 PHP 进程。一些 mod_fcgid 模式确实支持这一点,但是如果没有您的配置的更多详细信息,我无法为您提供任何进一步的指导。对不起。
【讨论】:
我被告知目前没有任何 opcache 扩展与 suPHP 兼容,很遗憾。
LiteSpeed 的 suEXEC 可以支持操作码缓存,但只能在“守护进程”或“进程组”模式下,不在标准的“worker”模式下 (see their explanation here)。
因此,即使您可以在 cPanel 中或通过 INI 启用 opcache,您也不会获得缓存命中,因为 PHP 进程结束并且 RAM 被释放。看来我暂时不走运了。
【讨论】: