启用APC但Apache仍在打开文件?

时间:2009-07-26 09:27:10

标签: php apache scalability apc strace

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

1 个答案:

答案 0 :(得分:7)

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

  

apc.stat integer

     

小心更改此设置。默认为on,强制APC对每个请求上的脚本进行stat(检查)以确定它是否已被修改。如果它已被修改,它将重新编译并缓存新版本。如果此设置关闭,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';

因此,您仍然可以使用相对路径,但实际上是使用完整路径。