2009-09-30 153 views
13

我读过关于加速多个php文件站点的APC。因此,我在PHP中使用了许多文件,并且发现require_once和仅解析类定义(不执行它们)需要大部分时间。如何使APC(PHP缓存)工作?

所以我在我的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是否正在工作,如果没有,可能是什么问题。

+0

什么是你的APC的配置?特别检查: apc.include_once_override = 1 其中解决了APC的问题以及php中的标准include/reuire代码 – Neel 2009-09-30 10:11:25

+0

您使用的是什么类型的PHP-SAPI和服务器? Apache + mod_php,Apache + mod_fcgi/mod_fastcgi或者一些Lighttpd + fastcgi? – 2009-10-04 17:52:05

+0

我遇到同样的问题。 Apache + mod_php和apc.php仅报告1个缓存文件(我怀疑它是apc.php文件本身)。有没有任何启示呢? – 2010-12-22 18:28:04

回答

8

APC可以以两种方式使用:

  1. 作为一个操作码缓存。你有支持启用,所以这是工作;和
  2. 作为一般的缓存。你必须为此明确使用API

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

至于它的工作,从installation instructions

注:在Windows中,APC需要存在,并且是由 网络服务器可写的临时路径。它检查TMP,TEMP, USERPROFILE环境变量 这个顺序,最后尝试 WINDOWS目录,如果这些目录都没有设置 。

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

也就是说,require/include要比require_once/include_once/autoload好,但它应该只是如果你用数百个文件做这件事。

+5

好的,我明白了。但是有什么方法可以测试它是否真的有效?正如我所说的APC.php只显示一次命中和错过,看起来不起作用。 – 2009-09-30 08:24:58

+2

我第二个这个。是否有任何证据(除了速度增加)可以告诉你它实际上在工作吗? – 2011-01-05 17:30:16

+2

我处于同样的困境,apc.php只显示一个文件在缓存中是apc.php。我很困惑:( – Kumar 2011-12-15 08:07:13

2

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

+0

我没有条件。我有4个文件包含3个库文件。我想确保APC的工作,因为APC.PHP不会指责它。 – 2009-09-30 08:25:56

1

你检查过thr日志文件吗?看看/var/log/apache2/error.log,或者在您的发行版下指定它。

另外,尽量使2-3 PHP文件,点thebrowser他们,然后检查有多少PHP文件由APC缓存中..

不知道关于APC,但我建议eAccelerator在(http://eaccelerator.net/)。我前一段时间测试过,真的有所作为。

0

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

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

你应该尝试eAccelerator在+的/ dev/shm如果你需要使用PHP suEXEC。“

也得到了同样的问题,似乎PHP的suEXEC + APC是问题

1

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

尝试添加以下内容到APC配置文件:

apc.enable_opcode_cache=1