最佳APC设置以减少页面执行时间


15

我有Drupal 7,带有php-fpm的apc和位于清漆和512 MB RAM之后的apache。

我用devel模块测量页面执行时间。

与页面执行时间854 ms相比,数据库查询时间很短(62ms)。这意味着PHP和APC设置存在问题。

我当前的设置是

apc.shm_size = 64
apc.stat=1 

我该如何改善?

在上述配置下,Drupal的最佳设置是什么?

谢谢

Answers:


12

我们在SVN推送环境中运行,因此我们仅使用脚本清除apc文件缓存。

APC设置:

apc.ttl=604800
apc.user_ttl=3600
apc.shm_size=192M
apc.include_once_override=1
auto_globals_jit=Off
apc.num_files_hint = 2048

apc.stat_ctime = 0
apc.file_update_protection = 2
apc.stat = 0

PHP脚本:

<?php
$return = apc_clear_cache('opcode');
echo var_export($return);

604800 = 1周。

此后,启动xdebug / xhprof并运行并对该站点进行缓存搜索,应该让您知道正在使站点变慢的原因。简而言之,分析缓存研磨输出是加快Drupal的最佳方法。下面我列出了我们使用哪些补丁和模块来加速它;在您的情况下,很有可能会有所不同。

下面的Drupal 6具体答案

一旦超过了这一点,并且意识到APC无法满足您的需求,请切换到pressflow并为这些补丁打个招呼

还可以尝试以下一些模块,因为它们在很大程度上改善了我们的网站速度:


非常感谢您的回答,但我的Drupal 7
约翰

因此,以APC部件和xdebug / xhprof部件为例,并以D6补丁为例,说明在do issue队列中查找的内容。以上所有补丁都是通过查看缓存而发现的,找到了痛点并找到了相应的问题。快速启动:drupal.org/project/issues/search/...
mikeytown2

现在有一个drupal 7性能Wiki:groups.drupal.org/node/210683
mikeytown2 2012年

1
仅供参考,我不得不注释apc.include_once_override = 1行,因为它破坏了站点 puregin.org/node/2550/3928
corbacho 2012年

php.net/apc.configuration#ini.apc.include-once-override感谢您指出这一点。根据PHP和APC版本的不同,它可能会引起问题
mikeytown2

3

这就是“一个字符串问题要多长时间”之一。

对于具有大量模块的低容量站点而言,对高容量站点的好处可能并不相同,而对于仅启用了几个模块的中容量站点而言,可能并不相同。服务器上运行的其他站点也可能正在占用APC可用的内存。

我的出发点是

apc.enabled=1
apc.shm_segments=1
apc.shm_size=64
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867=1

然后,我调整服务器的设置,但同样,没有一种尺寸适合所有设置。

查找apc.php(可能位于/usr/share/pear/apc.php),然后将其安装在DOCROOT中以进行Drupal安装。通过Apache配置将其锁定为您的IP地址。在其中编辑用户名/密码,然后浏览到它。然后,您将看到您的APC统计信息。

重新配置shm_size参数以最大程度地减少缓存丢失。理想情况下,您要为其提供足够的内存,以使文件永远不会丢失缓存,再为APC用户缓存提供一些额外的内存。

优化TTL以防止缓存混乱。如果您不编辑文件,则可以增加该数字。

当您经常使用drush时,enable_cli很方便,因此drush可以使用APC中的缓存文件。

rfc1867非常适合文件上传。

我还注意到标题中的php-fpm。这使事情变得复杂,并且实际上超出了Drupal Answers的范围。在Server Fault上,您可能会得到更好的响应,因为许多系统配置设置并不直接与Drupal相关。


有什么好的教程可以用简单的语言解释每个设置在做什么,例如ttl,segments等?cli如何帮助草率?
约翰

您能否解释一下“我得到的流量,服务器上正在运行的其他流量,已安装的模块等等”。影响设置?谢谢
约翰

上面的这些设置没有太大帮助。我应该尝试使用xhprof来了解php会发生什么吗?
约翰


1
@MPD> enable_cli在您经常使用drush时非常方便,因此drush使用APC中的>缓存文件。实际上,cli是一个独立的进程,不会与apache共享共享apc缓存,甚至在调用rush之间也不会共享。
罗宾·米莱特

2

APC只是改善了PHP文件的加载和解析。执行时间本身也是很大一部分。有很多因素会增加执行时间,包括错误(特别是与缓存相关的错误),内部开销(例如drupal_alter(),module_implements())等等。

根据您的要求,mikeytown2已建议您使用xhprof(与xdebug相比,我现在更喜欢xhprof,因为它可以直接,快速地访问结果并且不需要其他工具)来找出瓶颈所在。

我最近写了两篇关于在Drupal中使用xhprof典型瓶颈的博客文章,您可能会发现它们很有趣。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.