WordPress站点上的APC缓存碎片

时间:2012-02-15 11:18:01

标签: php wordpress apc

我最近在Web服务器(Centos 5.7,PHP 5.3,1.5Gb RAM)上安装并激活了APC缓存,该服务器主要用于中等流量(30k唯一访问者/ mo)运行W3Total Cache的WordPress站点,该站点设置为使用APC进行数据库和对象缓存(页面,缩小使用磁盘)。

服务器的APC信息页面显示存在严重的碎片。例如,重新启动httpd后,11小时后碎片率高达75%,而且几天后我已经看到它达到100%。我从未见过超过40%的高速缓存使用,服务器一直运行在大约400Mb内存,1100Mb空闲( - / +缓冲区/缓存,由free -m报告)。所以它似乎没有导致碎片的内存不足。

我从默认的APC和W3TC配置开始,尝试了以下更改的各种组合: -

  • apc.ttl减少到1800(从7200)
  • apc.user_ttl设置为0(唯一使用用户缓存的是W3TC并设置自己的TTL)
  • W3TC超时从180秒增加到7200秒
  • apc.filters阻止timthumb

这些变化似乎没有太大的区别,但到目前为止,Google网站管理员工具测量的主观效果和网页加载时间似乎都没有受到任何影响。

我应该担心这个吗?虽然目前的性能表明没有,但我宁愿在服务器负载/站点流量上升之前对其进行排序。如果引起关注,我可以采取哪些措施来解决?

编辑: - 这是完整的apc.ini配置文件: -

; Enable apc extension module
extension = apc.so

; Options for the APC module version >= 3.1.3
; See http://www.php.net/manual/en/apc.configuration.php

; This can be set to 0 to disable APC. 
apc.enabled=1
; The number of shared memory segments to allocate for the compiler cache. 
apc.shm_segments=1
; The size of each shared memory segment, with M/G suffixe
apc.shm_size=256M
; A "hint" about the number of distinct source files that will be included or 
; requested on your web server. Set to zero or omit if you're not sure;
apc.num_files_hint=1024
; Just like num_files_hint, a "hint" about the number of distinct user cache
; variables to store.  Set to zero or omit if you're not sure;
apc.user_entries_hint=4096
; The number of seconds a cache entry is allowed to idle in a slot in case this
; cache entry slot is needed by another entry.
apc.ttl=7200
; use the SAPI request start time for TTL
apc.use_request_time=1
; The number of seconds a user cache entry is allowed to idle in a slot in case
; this cache entry slot is needed by another entry.
apc.user_ttl=0
; The number of seconds that a cache entry may remain on the garbage-collection list. 
apc.gc_ttl=3600
; On by default, but can be set to off and used in conjunction with positive
; apc.filters so that files are only cached if matched by a positive filter.
apc.cache_by_default=1
; A comma-separated list of POSIX extended regular expressions.
apc.filters="-.[omitted]/timthumb.php$"
; The mktemp-style file_mask to pass to the mmap module 
apc.mmap_file_mask=/tmp/apc.XXXXXX
; This file_update_protection setting puts a delay on caching brand new files.
apc.file_update_protection=2
; Setting this enables APC for the CLI version of PHP (Mostly for testing and debugging).
apc.enable_cli=0
; Prevents large files from being cached
apc.max_file_size=1M
; Whether to stat the main script file and the fullpath includes.
apc.stat=1
; Vertification with ctime will avoid problems caused by programs such as svn or rsync by making 
; sure inodes havn't changed since the last stat. APC will normally only check mtime.
apc.stat_ctime=0
; Whether to canonicalize paths in stat=0 mode or fall back to stat behaviour
apc.canonicalize=0
; With write_lock enabled, only one process at a time will try to compile an 
; uncached script while the other processes will run uncached
apc.write_lock=1
; Logs any scripts that were automatically excluded from being cached due to early/late binding issues.
apc.report_autofilter=0
; RFC1867 File Upload Progress hook handler
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
; Optimize include_once and require_once calls and avoid the expensive system calls used.
apc.include_once_override=0
apc.lazy_classes=0
apc.lazy_functions=0
; Enables APC handling of signals, such as SIGSEGV, that write core files when signaled. 
; APC will attempt to unmap the shared memory segment in order to exclude it from the core file
apc.coredump_unmap=0
; Records a md5 hash of files. 
apc.file_md5=0
; not documented
apc.preload_path

更新我也是posted on WP forums并得到了W3TotalCache作者的回复: -

  

在某些网站上,这种体验并不出人意料。我会继续努力的   下一版本中的缓存逻辑可以提高APC的性能。

因此看起来W3TotalCache是​​碎片化的根本原因。

1 个答案:

答案 0 :(得分:5)

尝试增加APC使用的分段大小。仅使用一个细分。还可以从您创建的子域访问wp管理界面。

Optimize APC Caching

如果您的服务器上还有其他不需要操作码缓存的虚拟主机,则可以为这些站点禁用APC。您可以通过在apc.ini文件中设置apc.cache_by_default=0在vhost级别执行此操作,并将php_flag apc.cache_by_default On放在wp根目录的.htaccess文件中。这应该是分裂的原因。

文件中的更改也可能导致碎片。将删除已编辑的文件,并将新文件添加到缓存中。如果您还没有,您还应该设置apc.stat=0。这样可以通过不检查文件是否每次都进行检查来提高整体性能。

如果您不希望缓存WP Admin,则可以创建admin.example.com等子域,并且可以访问管理面板。通过这样做,您将能够禁用操作码缓存。这也将减少碎片。

<强>更新 禁用对象缓存和数据库缓存有助于减少碎片。用于对象缓存的us'ng redis或memcached以及仅用于操作码缓存的APC解决了这个问题。