APC不能加速PHP 5.4

6

以前在WAMP服务器和PHP 5.3上遇到过这个问题,现在在Linux上使用PHP 5.4也面临同样的问题。

基本上,启用或禁用APC对性能没有影响,尽管apc.php中的统计数据显示不同。

以下是一个示例测试脚本,其中包括30多个Doctrine PHP文件,并计时:

$t = microtime(true);
include 'Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php';
printf('%.3f s', microtime(true)-$t);
  • 在Windows上的结果(Zend Server CE,PHP 5.4):0.001 s
  • 在Linux上的结果(PHP 5.4和APC 3.1.11):0.106 s

注意:即使在上面的脚本中没有显示,我实际上正在使用文件的完整路径,而不是依赖于include_path。

我在Linux上得到的结果无论apc.enabled0还是1都是相同的,所以看起来opcode缓存只是不起作用。

然而,apc.php说:

apc.php

软件包(来自remi存储库,CentOS 6.3):

php-5.4.5-1.el6.remi.x86_64
php-pecl-apc-3.1.11-1.el6.remi.1.x86_64

APC配置:

apc.enabled=1 
apc.shm_segments=1
apc.shm_size=64M
apc.num_files_hint=1024
apc.user_entries_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.file_update_protection=2
apc.enable_cli=1
apc.max_file_size=1M
apc.stat=1
apc.stat_ctime=0
apc.canonicalize=0
apc.write_lock=1

最后一件事,是的,PHP报告APC已启用:

var_dump(extension_loaded('apc')); // (bool) true

我也遇到了同样的问题!如果有人能帮忙就太好了。 - Josh Stuart
2
一个好的 PHP 问题在 Stack Overflow 上?所有的赞! - cmbuckley
1个回答

3

我忘记提到问题的一个重要部分:Web服务器在Windows 7下运行的Linux虚拟机上,并从主机上的共享文件夹中读取文件。

我发现减慢APC的原因是必须在该共享文件夹上进行文件stat操作。

将文件复制到虚拟机中可解决该问题。

然而,令人惊讶的是,apc.stat=0单独无法解决问题,我本来期望它只执行一次stat并始终从内存缓存中读取所有内容。


1
这可能会解释apc.stat=0的行为(http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat):对于包含/需要的文件,此选项也适用,但请注意,对于相对路径包含(任何在Unix上不以/开头的路径),APC必须检查以唯一地标识文件。如果您使用绝对路径包含,则APC可以跳过stat并使用该绝对路径作为文件的唯一标识符。 - Joel Beckham
确实,虽然我相信我的路径现在是绝对正确的,但我不能确定它们过去是否一直如此... 这个问题已经有点老了,我需要进行一些新的测试! - BenMorel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接