APC、APCu和Opcache之间的区别是什么?

43

我正在运行以下软件包的Web服务器: php-apc 3.1.7-1 php5-fpm 5.3.10-1ubuntu3.10

然而,我已经在Ubuntu 14.04上建立了一个新服务器,似乎php-apc不再可用。

因此,APC是我应对巨大流量(每日100k独立访客)的救命稻草。

我对PHP的缓存机制有点困惑。 新服务器包括以下软件包: php-apc 4.0.2-2build1 php5-apcu 4.0.2-2build1 php5-fpm 5.5.9+dfsg-1ubuntu4.7

phpinfo()将“apc”作为模拟输出。据我理解,APC已被APCu取代。

https://github.com/cepa/kickasscache 我正在运行这个免费的类来进行缓存,它真的节省了很多CPU /内存。 但我不知道这是否与APCu相同?

如果不是,我该如何设置正确的缓存? 因为我的新服务器资源有限,我需要一个解决方案。

php -v返回

PHP 5.5.9-1ubuntu4.7 (cli) (built: Mar 16 2015 20:47:39)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

这意味着OPcache默认启用了吗?


2
APCu是旧版APC的用户数据组件,没有字节码缓存,因为OpCache现在是PHP的标准字节码缓存,但不提供用户数据缓存。 - Mark Baker
@MarkBaker 谢谢提供信息。有没有办法恢复旧的APC功能?我在考虑降级我的操作系统、PHP和其他软件包。 - martyr
如果您将PHP降级到5.5以下,则会失去OpCache并能够再次使用APC作为字节码缓存。 - Mark Baker
请注意,PHP 5.4不再得到积极支持,只有安全更新,而这些更新将在9月14日停止。 - Mark Baker
2
@MarkBaker非常感谢您提供的宝贵信息。我想我找到了问题所在。整个故事是由php-apcu包引起的...我已经使用apt-get安装了它,然后使用pecl升级了它。但是,如果我升级到4.0.7,它会耗尽我的内存。我现在使用4.0.2很好。我在pecl升级时遇到了分段错误,但我忽略了它。因此,底线是:不要使用PECL升级php-apcu。使用apt的标准版本4.0.2即可 :) - martyr
@MarkBaker,为什么不把你的评论写成一个正式的答案呢?那似乎已经涵盖了它。 :) - anarcat
1个回答

29

自 PHP 5.5 及更高版本起,无需使用 APC(或任何类似的字节码缓存扩展,如 XCache)。PHP 开发人员直接将他们称为 OPCache 的功能集成到产品核心中。这不仅提供了更大的整体产品稳定性,而且得到了 PHP 开发人员的官方支持。

如果您需要从 APC 中获取的特定功能,在 OPCache 中找不到(例如 APCu 功能),则应在 php-dev 邮件列表上开始讨论。

最后,一个很好的经验法则是只运行列在 php.net 主页上的 PHP 版本。虽然发行版通常会反向移植安全修复程序,但更新的 PHP 版本具有更有用的功能。新版本的 PHP 通常还具有显着的性能优势,可能使您免于需要额外的 PECL 扩展,例如 APCu。


1
请问能提供一下资源吗? http://php.net/manual/en/book.opcache.php 上说它已经和 PHP 5.5+ 捆绑在一起了,但是在我新安装的 PHP 5.6+ 的 /etc/php5/cli/php.ini/etc/php5/apache2/php.ini 文件中,内容显示默认情况下是禁用的(;opcache.enable=0)。 - Romain Pellerin
那个分号在该条目开头表示该行被注释掉了,所以在我看来,opcache 已经 在您的PHP安装中启用了。如果没有分号,那么它确实会被禁用,所以您很好。 - Dave Morton
如果您正在使用APC的数据存储功能,可以安装php-apcu-bc,它会使用APCu安装兼容性函数。 - Ariel
2
@DaveMorton,Debian的做法是注释掉默认设置,因此在这种情况下,默认值为0,并且默认情况下禁用了opcache。 - DooMMasteR

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