【问题标题】:APC Enabled but Apache Still Opening Files?APC 已启用但 Apache 仍在打开文件?
【发布时间】:2009-07-26 09:27:09
【问题描述】:

我正在开发一个提供动态 PHP 代码的高流量网络服务器场,其中包含大多数请求的大约 100 个文件。 APC 操作码缓存已启用,include_once_override 已启用,并且我已经为缓存分配了 64MB 内存,但是当我 strace 一个 apache 进程时,我仍然看到它 open()ing 和 stat()ing 所有这些包括每个请求应该是从缓存中提取。我可以在缓存统计信息中看到缓存正在被填充并以 100% 的命中率使用。谁能提供任何见解?

【问题讨论】:

  • 请问,您是否在使用和不使用 include_once_override 的情况下对您的服务器进行了基准测试?
  • 谢谢!是的,我在有无的情况下进行了基准测试,并没有发现明显的差异。现在,在实现绝对路径后,我看到的 stat() 少了很多,但是,我仍然看到我所包含的每个文件都有一个 access(),即使使用apc.stat = 0。这正常吗?为什么必须访问这些文件?
  • 您确定您看到的不只是文件的初始包含吗?你用的是什么版本? APC 在历史上一直存在与 include_once_override 相关的问题。另外,请使用回复而不是使用答案来编辑您的原始问题。

标签: php apache scalability apc strace


【解决方案1】:

请确保您对应用程序中的每个包含都使用完整路径名。根据 APC 文档:

apc.stat 整数

小心更改此设置。这默认为 on,强制 APC 在每个请求上统计(检查)脚本以确定它是否已被修改。如果它已被修改,它将重新编译并缓存新版本。如果关闭此设置,APC 将不检查,这通常意味着要强制 APC 重新检查文件,必须重新启动 Web 服务器或手动清除缓存。请注意,FastCGI Web 服务器配置可能不会在重新启动时清除缓存。在脚本文件很少更改的生产服务器上,禁用统计信息可以显着提高性能。

对于包含/必需的文件,此选项也适用,但请注意,对于相对路径包含(在 Unix 上不以 / 开头的任何路径),APC 必须检查才能唯一标识文件。如果您使用绝对路径包含 APC 可以跳过统计信息并使用该绝对路径作为文件的唯一标识符。

PHP 的一个好的经验法则是定义一个包含项目完整路径的常量,如下所示:

// Assumes __FILE__ is in the root of your project
define('PATH_PROJECT', realpath(dirname(__FILE__)));

然后像这样使用你的包含:

include_once PATH_PROJECT . '/some/dir/file.php';

因此您仍然拥有相对路径的便利,但实际上是使用完整路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2015-01-19
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多