为什么PHP 5.5的OPcache显示零命中? suPHP的罪魁祸首?

时间:2014-03-13 12:30:55

标签: php suphp opcache

在我的(共享)网络托管服务器上启用了PHP 5.5的OPcache扩展,但由于某种原因,它始终报告" 0次点击"在统计数据中。可能是因为它与 suPHP 不兼容?

或者任何人都有任何其他建议,为什么有0个缓存命中?

enter image description here

2 个答案:

答案 0 :(得分:8)

可以为CLI和基本GCI轻松启用OPcache,但除非PHP进程持续多个请求,否则您只会在人为的场景中看到缓存命中 - 例如当同一个脚本在同一个请求中多次编译时。 (我说设计,因为这样的脚本无法定义全局命名空间实体,如类或函数,因为第二次和后续编译将失败。)

在大多数共享主机配置中,系统管理员将PHP配置为一次性php-cgi执行,即在托管帐户UID内基于每个请求启动PHP映像。这具有简单和安全的优点。这也有性能差的缺点,因为PHP映像启动开销是在每个请求的基础上产生的,并且由于mmap的SMA在映像关闭时被丢弃,所以任何编译的脚本都不会从请求到请求持续存在。

要使OPcache正常工作,您需要拥有将在一连串请求中保留的PHP进程。一些mod_fcgid模式确实支持这一点,但是如果没有配置的进一步细节,我不能给你任何进一步的指导。抱歉。

答案 1 :(得分:5)

我很遗憾地告诉我目前没有opcache扩展名与suPHP兼容

LiteSpeed的suEXEC 可以支持操作码缓存,但仅限于' 守护程序'或者' 流程组'模式,而非标准' 工作者'模式(see their explanation here)。

因此,即使您可以在cPanel或INI中启用opcache,也不会获得缓存命中,因为PHP进程结束并且RAM被释放。看起来我暂时没有运气。