如何使APC(PHP缓存)起作用?

13

我了解了 APC 可以加速多个 PHP 文件的网站。我有一个 PHP 项目,它有许多文件,并且我发现 require_once 和解析仅类定义(而不执行它们)需要最长的时间。

因此,我在我的 CentOS 5 服务器上安装了 APC。我将 apc.php 移动到了我的 Web 服务器上,并显示如下:

Hits: 1 (50.0%)
Misses: 1 (50.0%)

Cached Files    1 (281.1 KBytes)

我可以登录到网站并更改子页面等,但是apc.php仍然只显示一个缓存文件?

在phpinfo()中显示:

APC支持已启用

我不知道该怎么做。 APC是否正常工作(如phpinfo()所说)?还是没有?在浏览网站的一些页面后,只有一个缓存文件不多。

此外,如何诊断错误并确保APC正常工作? 我浏览了

apc.mmap_file_mask /tmp/apc.QnLqNf /tmp/apc.QnLqNf

目录/tmp,但我在那里没有任何apc文件,就像在phpinfo中说明的那样。

请帮助我检查APC是否正在工作,如果没有,可能会出现什么问题。


你的APC配置是什么?具体检查以下内容: apc.include_once_override=1 这可以解决APC和php中标准include/require代码的问题。 - Neel
你正在使用哪种PHP-SAPI和服务器?Apache + mod_php,Apache + mod_fcgi / mod_fastcgi还是一些Lighttpd + fastcgi? - Benjamin Cremer
我也遇到了同样的问题。使用Apache + mod_php,apc.php仅报告1个缓存文件(我怀疑是apc.php文件本身)。这个问题有任何新的发现吗? - Chris Tonkinson
我遇到了同样的问题,此外,当我尝试运行apc_compile_file('somefile.php')(我这样做是为了调试目的),它返回false,意味着它根本无法编译文件。我们在编译扩展时是否错过了某些编译器指令? - Pelle
@DudeSolutions 很高兴你开心了,但实际上这不仅仅是关于2个文件的问题。 - Tom Smykowski
@tomaszs 哦,好的!非常抱歉我这么挑剔 :) - FredTheWebGuy
6个回答

8

APC有两种使用方式:

  1. 作为opcode缓存。由于您启用了支持,因此此功能正在工作;并且
  2. 作为通用缓存。您必须明确使用API

(1)是主要优点。它通过存储“编译”脚本的opcode结果来减少脚本执行时间。

至于它的工作原理,请参见安装说明:

注意: 在Windows上,APC需要存在一个临时路径,并且可由Web服务器进行写入。 它按照TMP,TEMP, USERPROFILE环境变量的顺序检查,如果没有设置,则尝试WINDOWS目录。

因此,在CentOS上您不需要它(或看到任何活动)。

话虽如此,require/include比require_once/include_once/autoload更好,但只有在处理数百个文件时才会有所区别。


5
好的,我明白了。但是有没有办法测试它是否真的有效?正如我提到的APC.php只显示了一个命中和未命中,看起来好像它并没有起作用。 - Tom Smykowski
2
我赞同这个观点。除了速度的提升之外,有没有其他证据可以证明它确实在起作用? - Pelle
2
我也陷入同样的困境,apc.php只显示一个缓存文件,即apc.php。我很困惑 :( - Kumar

2

您的网站基本上只有一个PHP文件,然后包括或需要其他文件吗?这可能被视为单个文件。此外,据我所知,条件包含/要求逻辑可能无法像预期的那样缓存,尽管这可能只是谣言!


我没有条件语句。我有4个文件,其中包括3个库文件。我想确保APC工作正常,因为APC.PHP没有指示它。 - Tom Smykowski

1

你检查过日志文件了吗?看看 /var/log/apache2/error.log,或者在你的发行版下以其他名称命名。

另外,试着创建 2-3 个 PHP 文件,将浏览器指向它们,然后检查 APC 缓存中有多少个 PHP 文件被缓存了。

关于 APC 我不太确定,但我推荐使用 Eaccelerator (http://eaccelerator.net/)。我之前测试过,确实产生了一些改变。


1

1
在APC 3.1.5dev分支中,引入了一个新选项,允许你禁用opcode缓存。默认情况下似乎已关闭。 尝试将此内容添加到您的APC配置文件中:
apc.enable_opcode_cache=1

0

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

"

APC在PHP suEXEC中表现不佳,因为每个PHP进程将使用自己的缓存内存,而不是共享的。

如果您需要使用PHP suEXEC,可以尝试使用eAccelerator + /dev/shm。

我也遇到了同样的问题,似乎PHP suEXEC + APC存在问题。

"

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