望见那地上的一棵草,那是大的无限.

Mediawiki 缓存

来自森亮号航海见识 {SLboat Insight;}
跳转至: 导航搜索

相关

Mediawiki 性能优化/缓存设置

todo

  • 将缓存移到一个单独的盘,因为它不需要被备份
或许也可以备份的时候排除它
  • 如何清除缓存?重建缓存呢?

发现

  • wiki基金会用的是什么?APC
  • 还能缓存侧边栏啥的,具体的暂时丢在帮助:系统:优化性能
  • 默认对象缓存还包括细致的设置-$wgObjectCaches
  • 清除缓存可以非常彻底...直接的删除所有子文件...

经验

  • 开启文件缓存
在LocalSettings.php开启
$wgUseFileCache = true; /* default: false */
$wgFileCacheDirectory = "$IP/cache/html";
$wgShowIPinHeader = false;
  • 查看效果:非登陆用户查看的时候就是缓存了。

相关的玩意

$wgShowIPinHeader

  • 禁止显示ip头,不知道ip头在哪里,但是官方说是这样有助于提高缓存效能
$wgShowIPinHeader = false; //禁用IP头显示

$wgUseGzip

  • 如果php没有开启zlib压缩,那么这里可以开启,前提是服务器没有开启压缩输出,具体-Mediawiki 开启gzip压缩
$wgUseGzip = true; #开启缓存,但是服务器不能开启gzip压缩输出,否则乱码

$wgCacheDirectory

  • 这是个有意思的玩意,因为有些家伙会用到它,将它设置个目录,看起来它会缓存一些东西
$wgCacheDirectory = "$IP/cache"; #这个是别的玩意的缓存目录吧
  • 官方的说法:
Manual:Cache - MediaWiki 沿途见识[1]

Localization caching


New in 1.16
After finding out that a large number of the cached objects above were interface messages, the bits of text that are not content, an advanced localisation cache was introduced. Set $wgCacheDirectory in LocalSettings.php to a valid path to use.

官方文档

性能优化
http://www.mediawiki.org/wiki/Manual:Performance_tuning
文件缓存
http://www.mediawiki.org/wiki/Manual:File_cache

见识

Manual:$wgObjectCaches - MediaWiki 沿途见识[2]

$wgObjectCaches = array(
        CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ),
        CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ),
        CACHE_DBA => array( 'class' => 'DBABagOStuff' ),
 
        CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ),
        CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ),
        CACHE_MEMCACHED => array( 'factory' => 'ObjectCache::newMemcached' ),
 
        'eaccelerator' => array( 'class' => 'eAccelBagOStuff' ),
        'apc' => array( 'class' => 'APCBagOStuff' ),
        'xcache' => array( 'class' => 'XCacheBagOStuff' ),
        'wincache' => array( 'class' => 'WinCacheBagOStuff' ),
        'memcached-php' => array( 'class' => 'MemcachedPhpBagOStuff' ),
        'hash' => array( 'class' => 'HashBagOStuff' ),
);

MediaWiki文件缓存的弊端 - 祁劲松的维客空间 - Wiki of James Qi 沿途见识[3]

--James Qi 2009年6月1日 (一) 11:57 (CST)
  启用MediaWiki的文件缓存(File Cache)功能,并且把过期时间改为永不过期后,服务器的负载确实大大降低了,因为老的页面只要访问一次后就保存成了静态HTML文件,以后都不需要访问数据库了,再加上前段还有一级Squid缓存,对于匿名用户访问来看,浏览速度提升效果很明显。
  也因为启用了文件缓存后效果不错,我把查号吧网站中的手机号段、小灵通/一号通号段页面中去掉的一万个号码列表再次恢复了,不过在生成新的文件缓存页面时遇到问题,因为每个缓存文件大约有170K大,是普通页面的10倍左右,所以生成一个文件所用的时间也要几十秒,而同时访问(例如搜索引擎爬虫一起来快速爬)的时候,就造成很多页面报错,而MediaWiki的File Cache功能不加区分地把这些报错页面进行了缓存,而且以后不会自动更新。
  上周手工检查一个网站的缓存目录,就发现很多小于1K的缓存文件,都是报错的页面(内容类似这样:“Fatal error: Maximum execution time of 30 seconds exceeded in /usr/local/apache2/htdocs/telecode/includes/Parser.php on line 2717”或者“数据库错误 发生数据库查询语法错误。 可能是由于软件自身的错误所引起。 最后一次数据库查询指令是:
(SQL查询已隐藏)
来自于函数 "MediaWikiBagOStuff::_doinsert"。 MySQL返回错误 "1205: Lock wait timeout exceeded; try restarting transaction (221.233.134.182)”),昨天让公司同事帮忙写了脚本批处理检查,几个服务器上都有几千个这样小于1K甚至大小为0的错误文件,加起来有上万个,手工更新起来不现实,就让同事批量删除了,以后有访问的时候应该可以重新生成。
  另外还有一种出错的页面,出现了页面菜单、分类、底部内容,而中间的关键内容却是一个访问数据库的报错(内容类似这样:18dao has a problem Sorry! This site is experiencing technical difficulties. Try waiting a few minutes and reloading. (Can't contact the database server: Host '221.233.134.182' is not allowed to connect to this MySQL server (221.233.134.182))),这样的文件大小有15K左右,和正常的页面差不多或者稍微小点,这只有用关键词来搜索找到,同事小明的Linux脚本技术还不错,进行了一些设置、运行后,也都找出来了,比小于1K的那种报错页面少很多,但这些也都是需要重新生成的,只有批量删除了。
  以前因为保持File Cache定期更新,所以即使有一些报错页面,也会在定期更新时纠正,现在改为永不更新(除非页面发生变化)后负载是下降了但如果有错误缓存就不能得到纠正,只有以后把脚本做成定时自动执行,来发现错误并删除。
  另外,这个月等MediaWiki 1.15正式颁布发布后,准备把一直用了两年的1.10进行升级,看看一些发现的MediaWiki系统问题是否得到了改进。
  补充几个删除文件缓存的命令:

  1. 删除超过5天的缓存文件:

find /path/to/cache -type f -mtime +5 -exec rm {} \;

  1. 删除包含“分类:”的.html.gz缓存文件:

find /path/to/cache -type f -name "%E5%88%86%E7%B1%BB%3A*.html.gz" -exec rm {} \;

  1. 删除包含“Category:”的.html缓存文件:

find /path/to/cache -type f -name "Category%3A*.html" -exec rm {} \;

Improving Mediawiki performance - Frederik's Blog 沿途见识[4]

Make sure you run the latest Mediawiki version. Mediawiki 1.16 introduced a new localisation caching system which is supposed to improve performance, so you definitely want this to get the best performance.
Create a directory where Mediawiki can store the localisation cache (make sure it is writable by your web server). By preference store it on a tmpfs (at least if you are sure it will be big enough to store the cache), and configure it in LocalSettings.php:
$wgCacheDirectory = "/tmp/mediawiki";
Iif /tmp is on a tmpfs, you might add creation of this directory with the right permissions to /etc/rc.local, so that it still exists after a reboot.
Enable file caching in Mediawiki’s LocalSettings.php:
$wgFileCacheDirectory = "{$wgCacheDirectory}/html";
$wgUseFileCache = true;
$wgShowIPinHeader = false;
$wgUseGzip = true;
Make sure you have installed some PHP accelerator for caching. I have APC installed and configured it in Mediawiki’s LocalSettings.php:
$wgMainCacheType = CACHE_ACCEL;

How to Rebuild the File Cache? - Maintenance Script: rebuildFileCache.php 沿途见识[5]

OK, here is what I finally found (almost nothing gleaned via Google)...

1) Start from page 0 and rebuilds the entire cache: php rebuildFileCache.php 0 overwrite
2) Start from page 0 and builds only uncached pages: php rebuildFileCache.php 0

So, if you are using a standard directory layout with LocalSettings.php in your root, you only need the <start> and possibly the <overwrite> parameters.

Hope that helps someone else in the future. -- Rik

Manual:Cache - MediaWiki 沿途见识[6]

If you have a PHP byte-code cache, see PHP caching above, you can easily use this to store all of the extra data. This is strongly recommended, and requires the following line in LocalSettings.php:
$wgMainCacheType = CACHE_ACCEL;

PHP caching and optimization - Meta 沿途见识[7]

Which PHP cache is used? APC or Turck MMcache?
Wikimedia currently uses APC.

调整MediaWiki文件缓存设置降低服务器负载 - 祁劲松的维客空间 - Wiki of James Qi 沿途见识[8]

最近半个月左右,有一台服务器老是出问题,死机后只能让机房人员帮忙重启,但原因始终查不出来,到后来几乎每隔1、2天就随时可能Down掉。昨天晚上打球回来发现再次死机了,我也不好意思再去让机房人员重启了,就把站点都转移到另外一台服务器上去了,转移都很顺利,只是另外一台服务器的负载马上升高了很多,而且硬盘容量也更紧张。
  今天早上去办公室,一边联系新配一台服务器拿过去顶替的事情,一边设法降低负载(否则可能所有网站都无法正常访问了)。从前面各种措施的效果来看,文件缓存还是很明显的,也就是利用MediaWiki的File Cache功能生成静态HTML文件。这个功能默认是不启用的,启用后还是很管用,特别是对大流量的网站来说,Apache将已经生成的HTML文件发给浏览者比从MySQL数据库读取数据发给浏览者的效率高很多倍。
  不过文件缓存的缺点是更新机制不好,特别是不支持动态页面列表内容的更新。我以前都是采用设置$wgCacheEpoch来定期更新,有些网站用每天更新、有些网站每月更新,以便包含动态页面列表的页面也能周期性更新。但这样中仍然会过多消耗服务器资源,其实绝大多数不含动态数据的页面根本不需要更新,只需要更新包含动态数据的页面就可以。
  我在MediaWiki官方网站上找到了两个扩展程序:Extension talk:MagicNoCache、Extension:CacheManager,第一个很符合我们的需要,但反复测试都不能正常使用,也没有什么技术支持,后面一个安装需要改数据库、比较麻烦,就都没用。我在需要更新的页面中加入一个人工保持一定频率更新的模板,这样该模板变化后,调用的页面也会更新,算是一种可用的解决办法。
  关于File Cache还剩下一个问题,就是在http://18dao.jamesqi.com/ 等繁体网站中,从页面源文件来看没有使用缓存,但从设置的缓存文件目录来看,分明是又新缓存文件产生,这个问题很早就发现了,不过一直找不到原因和解决办法,留着以后检查、处理。
  从今天白天几个小时的效果来看还是很明显的,服务器负载基本都控制在正常范围内。不过过两天还是准备将另外一台好服务器拿到机房去顶替坏掉的服务器,另外还将目前的服务器进行硬盘、内存的扩充。

引用信息

以下是[Mediawiki 缓存]所有用到的引用信息,向这些伟大的家伙致敬:
  1. ^ Manual:Cache - MediaWiki, 见识于2013-4-17 20:14
  2. ^ Manual:$wgObjectCaches - MediaWiki, 见识于2013-6-8 13:54
  3. ^ MediaWiki文件缓存的弊端 - 祁劲松的维客空间 - Wiki of James Qi, 见识于2013-4-16 21:54
  4. ^ Improving Mediawiki performance - Frederik's Blog, 见识于2013-4-17 16:0
  5. ^ How to Rebuild the File Cache? - Maintenance Script: rebuildFileCache.php, 见识于2013-4-17 16:9
  6. ^ Manual:Cache - MediaWiki, 见识于2013-4-17 20:13
  7. ^ PHP caching and optimization - Meta, 见识于2013-4-17 20:18
  8. ^ 调整MediaWiki文件缓存设置降低服务器负载 - 祁劲松的维客空间 - Wiki of James Qi, 见识于2013-4-20 11:53