我在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住率。