为什么PHP5.5';显示零命中率的OPcache?凶手是谁?

为什么PHP5.5';显示零命中率的OPcache?凶手是谁?,php,suphp,opcache,Php,Suphp,Opcache,PHP5.5的OPcache扩展在我的(共享)web主机上启用,但出于某种原因,它总是在统计中报告“0次点击”。这可能是因为它与不兼容吗 或者有人对为什么缓存命中率为0有任何其他建议吗 对于CLI和基本GCI,可以简单地启用OPcache,但除非PHP进程在多个请求上持续,否则您只能在人为的场景中看到缓存命中,例如,在同一请求中多次编译同一脚本。(我说是人为的,因为这样的脚本无法定义全局名称空间实体,例如类或函数,因为第二次编译和后续编译将失败。) 在大多数共享主机配置中,系统管理员将PHP配置

PHP5.5的OPcache扩展在我的(共享)web主机上启用,但出于某种原因,它总是在统计中报告“0次点击”。这可能是因为它与不兼容吗

或者有人对为什么缓存命中率为0有任何其他建议吗


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

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


为了使OPcache工作,您需要有能够在突发请求中持久化的PHP进程。一些mod_fcgid模式确实支持这一点,但是如果没有配置的更多细节,我就无法提供更多的指导。对不起

遗憾的是,有人告诉我,目前没有opcache扩展与suPHP兼容

LiteSpeed的suEXEC可以支持操作码缓存,但只能在“守护程序”或“进程组”模式下,而不能在标准的“工作程序”模式下()


因此,即使您可以在cPanel中或通过INI启用opcache,也不会得到缓存命中,因为PHP进程结束,RAM被释放。看起来我现在运气不好。

@Prateek-根据我所做的一点研究,op缓存需要一个持久的进程来将缓存存储在RAM中。因此,您需要使用mod_php(与Apache一起使用)、php-FPM、FastCGI或类似的东西。我不认为straight CGI保持一个持久的进程,所以可能无法工作。明白了,所以我转向FCGI使用opcache。是的,很有效,谢谢@Simon