APC PHPcaching大小不超过32MB,即使设置允许更多

我在CentOS 6.0 64位的高stream量WordPress安装上设置了APC(v 3.1.9)。

我已经发现了很多与APC有关的怪癖,但还是有些不对劲。 无论我改变什么设置,APC从来没有实际caching超过32MB。 我试图把它撞到256 MB。 32MB是apc.shm_size的默认值,所以我想知道它是否以某种方式卡在那里。

我已经运行以下

echo '2147483648' > /proc/sys/kernel/shmmax 

把我的系统共享内存增加到2G(我的4G盒子的一半)。 然后跑了

 ipcs -lm 

哪个返回

 ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 2097152 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1 

也做了一个改变

 /etc/sysctl.conf 

然后跑了

 sysctl -p 

使设置坚持在服务器上。 重新启动,也是很好的措施。

在我的APC设置中,我启用了mmap(这在APC的最新版本中默认情况下发生)。 php.ini看起来像:

 apc.stat=0 apc.shm_size="256M" apc.max_file_size="10M" apc.mmap_file_mask="/tmp/apc.XXXXXX" apc.ttl="7200" 

我知道,mmap模式将忽略对apc.shm_segments的引用,所以我已经把它与默认1。

phpinfo()表示关于APC的以下内容:

 Version 3.1.9 APC Debugging Disabled MMAP Support Enabled MMAP File Mask /tmp/apc.bPS7rB Locking type pthread mutex Locks Serialization Support php Revision $Revision: 308812 $ Build Date Oct 11 2011 22:55:02 Directive Local Value apc.cache_by_default On apc.canonicalize O apc.coredump_unmap Off apc.enable_cli Off apc.enabled On On apc.file_md5 Off apc.file_update_protection 2 apc.filters no value apc.gc_ttl 3600 apc.include_once_override Off apc.lazy_classes Off apc.lazy_functions Off apc.max_file_size 10M apc.mmap_file_mask /tmp/apc.bPS7rB apc.num_files_hint 1000 apc.preload_path no value apc.report_autofilter Off apc.rfc1867 Off apc.rfc1867_freq 0 apc.rfc1867_name APC_UPLOAD_PROGRESS apc.rfc1867_prefix upload_ apc.rfc1867_ttl 3600 apc.serializer default apc.shm_segments 1 apc.shm_size 256M apc.slam_defense On apc.stat Off apc.stat_ctime Off apc.ttl 7200 apc.use_request_time On apc.user_entries_hint 4096 apc.user_ttl 0 apc.write_lock On 

apc.php显示下面的图表,无论服务器运行多长时间(caching大小波动,徘徊在32MB以下。

见图片http://i.stack.imgur.com/2bwMa.png

您可以看到caching正在尝试分配256MB,但是饼图中的棕色部分仍然以32MB循环。 这被证实为刷新apc.php页面显示上下移动的caching文件计数(意味着caching不保留所有文件)。

有没有人有一个想法如何让APC使用超过32 MB的caching大小?

**请注意,eaccelerator,xcache和APC会发生相同的行为。 我在这里读到:

http://www.litespeedtech.com/support/forum/archive/index.php/t-5072.html

suEXEC可能会导致这个问题。

这可能是一个不起步的,但你有没有testing过这个比这个WordPress的实例? 任何机会,你真的只有~32MB的cahceable内容?

您的实际问题是Apache的频繁重新启动,阻止APC构buildcaching。 我不评论wordpress的内存大小。 你使用的是cPanel吗? 它有一个日志轮转function,在日志轮转重新启动Apache之前,虽然它是一个平稳重启,但清除了所有的APCcaching。 您可以增加日志轮转阈值,也可以查看为什么如此快速地达到限制。 也许你可以在Apacheconfiguration下启用pipe道日志(在cPanel中)。

这个链接会告诉你如何做到这一点。

http://forums.cpanel.net/f5/cpanel-11-25-log-processing-145417.html

尝试加大

 apc.shm_segments 1 

然后看看会发生什么

APC只会caching正在使用的代码 – 当它有足够的内存的时候,唯一能从caching中删除代码的就是TTL。

增加TTL将增join住率。