【问题标题】:Why is PHP 5.5's OPcache showing zero hits? suPHP the culprit?为什么 PHP 5.5 的 OPcache 显示零命中? suPHP 的罪魁祸首?
【发布时间】:2014-04-18 04:38:25
【问题描述】:

PHP 5.5 的 OPcache 扩展已在我的(共享)网络主机上启用,但由于某种原因,它总是在统计信息中报告“0 次点击”。会不会是因为不兼容suPHP

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

【问题讨论】:

    标签: php suphp opcache


    【解决方案1】:

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

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

    要使 OPcache 正常工作,您需要有能够在请求爆发时持续存在的 PHP 进程。一些 mod_fcgid 模式确实支持这一点,但是如果没有您的配置的更多详细信息,我无法为您提供任何进一步的指导。对不起。

    【讨论】:

      【解决方案2】:

      我被告知目前没有任何 opcache 扩展与 suPHP 兼容,很遗憾。

      LiteSpeed 的 suEXEC 可以支持操作码缓存,但只能在“守护进程”或“进程组”模式下,不在标准的“worker”模式下 (see their explanation here)。

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

      【讨论】:

      • @Prateek - 根据我所做的一些研究,操作缓存需要一个持久进程来将缓存存储在 RAM 中。因此,您需要使用 mod_php(使用 Apache)、PHP-FPM、FastCGI 或类似的东西。我不认为直接的 CGI 保持一个持久的过程,所以可能无法正常工作。
      • Roger 那,所以我转向 FCGI 来使用 opcache。是的,它有效,谢谢@Simon
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多