优化APC缓存

18

这是我 APC 运行的链接: [已删除]

从链接中可以看出,它很快就填满了,我的 Cache Full 计数有时会超过 1000。

我的网站使用 WordPress。

我注意到每次发布或编辑文章时都会发生两件事。

1)APC 内存 "USED" 重置。 2)我获得了许多片段。

我尝试给 APC 分配更多内存(512 mb),但有时会崩溃,似乎384是最好的。我还有一个定期重启 Apache 的 Cron 作业,每 4 小时清除所有 APC 碎片和使用的内存。再次运行 APC 较长一段时间后,我的 Apache 就会崩溃,我认为是由于碎片的积累所致。

我应该使用 apc.Filters 并过滤掉一些不应被缓存的内容吗?

我对这种事情真的很菜,如果有人能够提供详细说明,谢谢!!!

3个回答

41

我是一名Linux系统管理员,我们的WordPress服务器上运行了5个不同的WordPress安装。如果你只运行一个,我会评论需要考虑的配置。

APC/PHP版本,3.1.9 / 5.3.7

这是我的完整apc.conf文件:

apc.enabled=1
apc.shm_segments=1

; I would try 32M per WP install, go from there
apc.shm_size=128M

; Relative to approx cached PHP files,
apc.num_files_hint=512

; Relative to approx WP size W/ APC Object Cache Backend, 
apc.user_entries_hint=4096

apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=2M

;This should be used when you are finished with PHP file changes.
;As you must clear the APC cache to recompile already cached files.
;If you are still developing, set this to 1.
apc.stat=0

apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600

;This MUST be 0, WP can have errors otherwise!
apc.include_once_override=0

apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

@Chris_O,你的一些配置不够优化。

1. apc.shm_segments=3

如果你使用的是现代Linux发行版,你的SHM应该已经足够大了。如果它太小了,请搜索如何设置sysctl.conf条目,你可以通过以下方法进行检查。

#Check Max Segment size
cat /proc/sys/kernel/shmmax

在某些BSD、其他Unix或您不控制的托管主机上运行时可能会出现异常。这种情况下,没有连续的段是有缺点的,请阅读APC的详细信息。

2. apc.enable_cli=1

不好不好不好,这只用于调试!每次运行php-cli时,它都会清除APC缓存。

3. apc.max_file_size=10M

没必要,也很荒谬!如果您有一个那么大的文件,它会占用那个小的32M SHM的三分之一。即使您指定了3个,它们也不像一个由三个部分组成的大段一样运作。无论如何,WP甚至没有单个PHP文件的大小接近那个值。

希望我可以帮助到使用apc.conf的人们。


1
@TechZilla,我正在使用Yii框架,并且它大量使用类的惰性加载,所以我应该启用apc.lazy_classes和apc.lazy_functions吗?这会影响其他方面吗? - Uday Sawant
2
@Uday Sawant:APC的惰性加载与Yii框架中的惰性加载是不同的。Yii是以“惰性”的方式编写的,而使用APC则是通常的“惰性”加载。特别是在Yii中,我仍然会将这些声明保持为“0”。手动的“惰性”加载可能会在没有外部干扰的情况下表现最佳。我还想提到,这些APC减速仍然相当新,需要更多的测试/统计数据/成熟度,然后再考虑设置为“1”。 - J. M. Becker
@TechZilla:谢谢兄弟...你能推荐一些用于基准测试这些设置的工具吗? - Uday Sawant
@Uday Sawant:当我需要快速测试而不是严肃的Jmeter分析时,我会使用abhttperf。通常你可以从你的发行版仓库中安装ab,它是Apache HTTP服务器基准测试工具。EL5 rpm包httpd、EL6 rpm包httpd-tools、Ubuntu/Debian Deb软件包apache2-utils。 - J. M. Becker

10

APC的ttl应该处理片段积累问题。我通常将其设置为7200。我在一个小型VPS上运行WordPress,并且我的设置如下:

apc.enabled=1
apc.shm_segments=3
apc.shm_size=32
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=2048
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.max_file_size=10M

如果您使用WordPress的内置对象缓存,并且使用Mark Jaquith编写的插件,那您将获得更多的好处,同时也可以帮助解决保存或编辑文章时的一些碎片化问题。


1

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