【问题标题】:How to make APC (PHP Cache) work?如何使 APC(PHP 缓存)工作?
【发布时间】:2010-12-02 12:14:25
【问题描述】:

我读过关于 APC 的文章,它可以加速多个 php 文件站点。所以我在 PHP 中有一个包含许多文件的特定项目,我发现 require_once 和只解析类定义(不执行它们)需要大部分时间。

所以我在我的 CentOS 5 服务器上安装了 APC。我将 apc.php 移动到我的网络服务器并显示

Hits: 1 (50.0%)
Misses: 1 (50.0%)

Cached Files    1 (281.1 KBytes)

我可以去网站更改子页面等等,apc.php仍然只显示一个缓存文件??

在 phpinfo() 中显示:

APC 支持启用

我不知道该怎么办。 APC 是否正常工作(如 phpinfo() sais)?浏览我网站的某些页面后,只有一个缓存文件并不多。

还有更多如何诊断错误并确保 APC 正常工作?我浏览过

apc.mmap_file_mask /tmp/apc.QnLqNf /tmp/apc.QnLqNf

目录 /tmp 但我没有任何像 phpinfo 中所述的 apc 文件。

请帮我检查 APC 是否正常工作,如果没有,可能是什么问题。

【问题讨论】:

  • 您的 APC 配置是什么?具体检查: apc.include_once_override=1 修复了 APC 和 php 中标准包含/reuire 代码的问题
  • 您使用的是哪种 PHP-SAPI 和服务器? Apache + mod_php、Apache + mod_fcgi / mod_fastcgi 还是一些 Lighttpd + fastcgi?
  • 我遇到了同样的问题。 Apache + mod_php,而 apc.php 只报告 1 个缓存文件(我怀疑是 apc.php 文件本身)。有没有任何启示呢?
  • 我遇到了同样的问题,此外,当我尝试运行 apc_compile_file('somefile.php') (我这样做是为了调试)时,它返回 false,这意味着它无法编译一个文件。我们在编译扩展时是否遗漏了一些编译器指令?
  • @DudeSolutions 很高兴你笑了,但事实上这不仅仅是两个文件。

标签: php caching centos apc


【解决方案1】:

APC有两种使用方式:

  1. 作为操作码缓存。您启用了支持,所以这是有效的;和
  2. 作为通用缓存。为此,您必须明确使用 API

(1) 是主要的好处。它通过存储“编译”脚本的操作码结果来减少脚本执行的时间。

至于它的工作原理,来自installation instructions

注意:在 Windows 上,APC 需要一个临时路径才能存在,并且可由 网络服务器。它检查 TMP、TEMP、 USERPROFILE 环境变量在 该命令,最后尝试 WINDOWS 目录,如果这些都不是 设置。

所以你不应该在 CentOS 上需要它(或查看任何活动)。

话虽如此,require/include 比 require_once/include_once/autoload 更好,但只有在处理数百个文件时才有意义。

【讨论】:

  • 好的,我明白了。但是有没有办法测试它是否真的有效?正如我提到的,APC.php 只显示了一次命中和未命中,看起来它不起作用。
  • 我支持这个。是否有任何证据(除了速度增加)可以告诉您它确实有效?
  • 我也陷入了同样的困境,apc.php 在缓存中只显示了一个文件,即 apc.php。我很困惑:(
【解决方案2】:

您的网站基本上是一个包含或需要其他文件的 PHP 文件吗?这可能只注册为一个文件。此外,据我所知,条件包含/要求逻辑可能不会按预期缓存,尽管这可能只是传闻!

【讨论】:

  • 我没有条件句。我有 4 个文件,其中包括 3 个库文件。我想确保 APC 能正常工作,因为 APC.PHP 没有指明它。
【解决方案3】:

您检查过日志文件吗?查看 /var/log/apache2/error.log 或者它在您的发行版下的名称。

另外,尝试制作2-3个php文件,将浏览器指向它们,然后检查APC缓存缓存了多少php文件..

不确定 APC,但我推荐 Eaccelerator (http://eaccelerator.net/)。我前段时间测试过,确实有所作为。

【讨论】:

    【解决方案4】:

    APC 实际上并不在进程之间共享缓存。 尝试将您的 PHP 进程配置为 fork Childs 并让主 PHP 进程保持运行。

    见:How to share APC cache between several PHP processes when running under FastCGI?

    【讨论】:

      【解决方案5】:

      在 APC 3.1.5dev 分支中,a new option was introduced 允许您禁用操作码缓存。 它似乎默认关闭。

      尝试将此添加到您的 APC 配置文件中:

      apc.enable_opcode_cache=1
      

      【讨论】:

        【解决方案6】:

        http://www.litespeedtech.com/support/forum/showthread.php?t=3761

        “APC 不能很好地与 PHP suEXEC 一起工作,因为每个 PHP 进程将使用自己的缓存内存,而不是共享的。

        如果你需要使用 PHP suEXEC,你应该尝试 eAccelerator + /dev/shm。"

        同样的问题,看来是PHP suEXEC + APC 有问题

        【讨论】:

          猜你喜欢
          • 2012-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-16
          相关资源
          最近更新 更多