简体   繁体   English

WordPress站点上的APC缓存碎片

[英]APC Cache fragmentation on WordPress site

I have recently installed and activated APC cache on a web server (Centos 5.7, PHP 5.3, 1.5Gb RAM) which is primarily dedicated to a medium traffic (30k unique visitors/mo) WordPress site running W3Total Cache which is set to use APC for database and object caching (page, minify use disk). 我最近在Web服务器(Centos 5.7,PHP 5.3,1.5Gb RAM)上安装并激活了APC缓存,该服务器主要用于中等流量(30k唯一访问者/ mo)运行W3Total Cache的WordPress站点,该站点设置为使用APC数据库和对象缓存(页面,缩小使用磁盘)。

The APC info page for the server shows that there is consistently heavy fragmentation. 服务器的APC信息页面显示存在严重的碎片。 For example, after restarting httpd, fragmentation is up to 75% after 11 hours, and I have seen it at 100% after a couple of days. 例如,重新启动httpd后,11小时后碎片率高达75%,而且几天后我已经看到它达到100%。 At no time have I ever seen more than about 40% of cache memory used, and the server consistently runs at about 400Mb memory used, 1100Mb free (-/+ buffers/cache, as reported by free -m). 我从未见过超过40%的高速缓存使用,服务器一直运行在大约400Mb内存,1100Mb空闲( - / +缓冲区/缓存,由free -m报告)。 So it doesn't appear to be lack of memory which is causing the fragmentation. 所以它似乎没有导致碎片的内存不足。

I started with the default APC and W3TC config, and have tried various combinations of the following changes:- 我从默认的APC和W3TC配置开始,尝试了以下更改的各种组合: -

  • apc.ttl reduced to 1800 (from 7200) apc.ttl减少到1800(从7200)
  • apc.user_ttl set to 0 (the only thing using user cache is W3TC and it sets its own TTLs) apc.user_ttl设置为0(唯一使用用户缓存的是W3TC并设置自己的TTL)
  • W3TC timeout increased from 180 to 7200 secs W3TC超时从180秒增加到7200秒
  • apc.filters to block timthumb apc.filters阻止timthumb

None of these changes seem to have made much difference, though so far subjective performance and page load times measured by Google Webmaster Tools don't seem to have been affected either way. 这些变化似乎都没有太大的区别,尽管到目前为止,Google网站站长工具测量的主观性能和页面加载时间似乎都没有受到任何影响。

Should I be worried about this? 我应该担心吗? While current performance suggests not, I'd rather get this sorted before server load/site traffic rises. 虽然目前的性能表明没有,但我宁愿在服务器负载/站点流量上升之前对其进行排序。 If it is of concern, what steps could I take to resolve? 如果引起关注,我可以采取哪些措施来解决?

EDIT:- Here's the full apc.ini config file:- 编辑: - 这是完整的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

UPDATE I also posted on WP forums and got this response from the author of W3TotalCache:- 更新我也发布在WP论坛上 ,得到了W3TotalCache作者的回复: -

That experience is not unexpected on some sites. 在某些网站上,这种体验并不出人意料。 I will be working on the caching logic in the next release to improve APC performance. 我将在下一个版本中研究缓存逻辑,以提高APC性能。

So it seems like W3TotalCache is the root cause of the fragmentation. 所以似乎W3TotalCache是​​碎片化的根本原因。

Try increasing the size of the segment size used by APC. 尝试增加APC使用的段大小。 Use only one segment. 仅使用一个细分。 Also access the wp admin interface from a subdomain you create. 还可以从您创建的子域访问wp管理界面。

Optimize APC Caching 优化APC缓存

If there are other vhosts on your server which does not need opcode caching, you can disable APC for these sites. 如果您的服务器上还有其他不需要操作码缓存的虚拟主机,则可以为这些站点禁用APC。 You can do it on vhost level by setting apc.cache_by_default=0 in the apc.ini file, and put php_flag apc.cache_by_default On in the .htaccess file on your wp root directory. 你可以在vhost级别上通过在apc.ini文件中设置apc.cache_by_default=0来完成它,并将php_flag apc.cache_by_default On到wp根目录的.htaccess文件中。 That should be the reason for the fragmentation. 这应该是分裂的原因。

Changes in the files also can cause fragmentation. 文件中的更改也可能导致碎片。 The edited file will be deleted and the new file will be added to the cache. 将删除已编辑的文件,并将新文件添加到缓存中。 If you haven't done already, you should also set apc.stat=0 . 如果你还没有,你还应该设置apc.stat=0 This will improve the overall performance by not checking everytime if the files are changed or not. 这样可以通过不检查文件是否每次都进行检查来提高整体性能。

If you don't want WP Admin to be cached you can create a subdomain like admin.example.com and you can access the admin panel. 如果您不希望缓存WP Admin,则可以创建admin.example.com等子域,并且可以访问管理面板。 By doing like this you will be able to disable opcode caching. 通过这样做,您将能够禁用操作码缓存。 Which will also decrease fragmentation. 这也将减少碎片。

Update: Disabling object caching and db caching help reducing the fragmentation. 更新:禁用对象缓存和数据库缓存有助于减少碎片。 Us'ng redis or memcached for object caching and APC for only opcode caching solves the problem. 用于对象缓存的us'ng redis或memcached以及仅用于操作码缓存的APC解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM