我正在开发一个提供动态 PHP 代码的高流量网络服务器场,其中包含大多数请求的大约 100 个文件。APC 操作码缓存已启用,include_once_override 已启用,并且我已经为缓存分配了 64MB 内存,但是当我 strace 一个 apache 进程时,我仍然看到它 open()ing 和 stat()ing 所有这些包括每个请求应该是从缓存中提取。我可以在缓存统计信息中看到缓存正在被填充并以 100% 的命中率使用。任何人都可以提供任何见解吗?
Will
问问题
1053 次
1 回答
7
将确保您对应用程序中的每个包含都使用完整路径名。根据 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';
因此,您仍然拥有相对路径的便利,但实际上使用的是完整路径。
于 2009-07-26T09:39:06.770 回答