APC 和 Drupal 7
替代PHP缓存(APC)是PHP的操作码和变量缓存。当您运行PHP脚本时,它首先被编译成一系列操作码,然后Zend引擎使用这些操作码在被丢弃之前运行程序。APC位于源文件和Zend引擎之间,将停止丢弃在PHP脚本执行期间生成的操作码。这意味着当您第二次运行PHP脚本时,生成操作码的工作已经完成,脚本将执行得更快。事实上,仅操作码缓存就可以显着提高PHP的执行速度,并在提高PHP网站的速度时提供“轻松取胜”。为像Drupal这样的复杂系统配备APC意味着您会看到性能的大幅提升,因此非常值得拥有。
安装APC有多种方法,但最简单的是使用apt-get(或类似的包管理器)。
sudoapt-getinstallphp-apc
您也可以通过PECL安装它。
peclinstallapc
安装完成后,您可以仔细检查apc.so文件是否包含在apc.ini文件中。这个文件是在我的本地主机设置的/etc/php5/apache2/conf.d/apc.ini中找到的,但你的系统可能不同。使用命令php--ini查看PHP加载了哪些ini文件,您应该看到该apc.ini文件已被包含。默认的APC安装将具有以下INI文件设置。
extension=apc.so
一旦您确定安装了APC,您将需要重新启动Apache(或您正在使用的任何Web服务器),以便开始使用APC缓存。重新启动后,APC将处于活动状态,并开始被PHP用于存储操作码。
要查看APC内部发生了什么,您可以使用与APC捆绑在一起的脚本文件。该文件被调用apc.php并且通常位于目录/usr/share/doc/php-apc/中,尽管这取决于您的系统以及您安装包的方式。请注意,在某些系统上,此文件称为apc.php.gz,在这种情况下,您需要apc.php先将其解压缩,然后才能使用。要使用此文件,只需将其复制到您的Web根目录并通过Web浏览器访问即可。这将为您提供有关APC如何执行的各种统计信息,包括一些图表(如果GD在服务器上可用)。
APC报告中最重要的是左侧的缓存完整计数值。这将显示APC缓存已被填充并需要强制清空在一定时间内未使用的项目的次数。这个时间限制是用运行时配置选项apc.ttl定义的,它可以在你的apc.ini文件中设置。这是一个昂贵的步骤,通常逐项运行,并且在配置良好的APC环境中应尽量减少。阻止缓存变满的最简单方法是增加可用的内存量。默认情况下,APC的内存段大小为32M,可以使用apc.shm_size中的设置进行更改apc.ini文件。我无法告诉您应该将APC分段大小设置为多少,您只需设置APC并查看统计数据的进展情况。如果看起来缓存填充得太快,则将段大小设置得更高,重新启动apache并与站点交互以将项目添加到缓存中以查看它是否填充得太快。要记住的一件事是,将APC缓存设置得太低会对性能造成重大影响。这是因为APC将不断检查和使缓存中存储的文件无效,每个页面加载可能多次。我可以告诉你的是,对于大多数Drupal站点来说,32M几乎肯定是太低了,所以你应该立即将其增加到64M甚至128M。
APC中还有许多其他配置选项可用,APC上的PHP手册是了解更多信息的好地方。
APC和Drupal
目前有两个模块可以与APC交互。
APC状态允许您从Drupal管理页面查看APC信息文件。为了查看报告,您需要将apc.php文件复制到/sites/all/libraries/APC/apc.php.inc位置。一旦文件就位并激活模式,您将在状态报告页面中看到一个链接,允许您查看APC信息页面。该模块是一种很好的方式,可以让您查看APC正在做什么,而不会因为apc.php文件免费提供而使您的服务器处于危险之中。如果您apc.php的webroot上有可用的文件,那么您将面临拒绝服务攻击,因为恶意用户会反复清空您的APC缓存,使其变得无用。
APC是一个模块,它允许您使用APC键/值缓存作为在Drupal中缓存项目的一种方式。这意味着您的缓存条目将保存到APC缓存中,而不是保存到数据库中,这显着提高了Drupal的速度。这类似于使用像memcached(带有相应模块)这样的键/值服务器,但使用APC。启用模块后,您需要告诉Drupal开始使用APC缓存。这可以通过在settings.php文件中设置一些值在Drupal7中轻松完成。
$conf['cache_backends'] = array('sites/all/modules/apc/drupal_apc_cache.inc'); $conf['cache_class_cache'] = 'DrupalAPCCache'; $conf['cache_class_cache_bootstrap'] = 'DrupalAPCCache';
这些设置对我有用,如果您在系统上启用它们,您应该确保一切都在您的站点上正常工作。有些模块不适合使用替代缓存,因此需要进行一些测试。确保在登录和注销时进行测试,尽管在登录时似乎可以正常工作,但在注销时可能不会。
APC模块README.txt文件还声明您可以告诉Drupal在查找缓存条目时不要启动数据库。遵循APC模块说明并在每次添加配置设置时进行测试是一个好主意,以确保您的站点在打开不同形式的缓存时仍能正常工作。
$conf['page_cache_without_database'] = TRUE; $conf['page_cache_invoke_hooks'] = FALSE;
该page_cache_without_database设置没有对我的设置工作,并出现了Drupal核心中的错误是造成这种错误的匿名用户。有几个问题正在尝试解决此问题,但在您的网站正常工作之前,我不会为您的网站启用此设置。该page_cache_invoke_hooks很好地工作,但。
请记住,如果您将值存储在APC缓存中,那么您需要确保有足够的内存供APC存储它们。如果您的系统可用内存已经达到最大值,那么使用此模块只会减慢您的网站速度。
需要注意的另一件事是,如果您使用APC模块,那么您将无法使用Drush清除缓存。这是因为APC命令行界面(CLI)使用与Web服务器不同的内存存储,因此无法从Drush中清除它。
当我设置服务器时#!我做的第一件事就是安装和配置APC。我花了一段时间调整配置并密切关注信息页面以查看APC是否正常运行。只需打开APC,我的页面加载时间就增加了20-30%。随着APC模块和APC被Drupal用作键/值缓存,页面加载时间又减少了10%。