WordPress全面提速之静态页内存缓存

Home / Article MrLee 2015-10-25 2804

本教程分为两点,一是启用系统内存来缓存静态html页面,然后再启用memcached来缓存减少SQL的并发。两种方法一起用可以使流量大的网站访问速度大大提升。量小的用wp-super-cache就够了。
大多数WordPress个人博客站长都会使用诸如Hyper Cache、WP Super Cache等缓存插件,使用这类插件可以将PHP动态页面在首次访问时生成html静态页面并存储在硬盘中,当其他访客再次访问时直接读取该静态页面,这样不需要再次通过php生成动态页面也不需要再从数据库中读取数据,大幅降低系统资源消耗,且大幅提升了页面打开速度。
如果不考虑服务器带宽,那最大的瓶颈就是硬盘了,因为这些生成的静态页面都存储在硬盘上,访问量大时,硬盘的读写速度低会导致网站访问缓慢,如何在较大的访问量下依然能保持页面的迅速打开呢?如果你使用VPS、云服务器或独立服务器,继续阅读下去,你会有大收获:
先来测测我使用的服务器硬盘读写速度:
# dd if=/dev/zero of=bigfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 19.8486 s, 26.4 MB/s
再来对比一下服务器内存的读写速度:
#cd /dev/shm
# dd if=/dev/zero of=bigfile bs=1M count=500
245+0 records in
244+0 records out
256016384 bytes (256 MB) copied, 0.141606 s, 1.8 GB/s
26.4MB/s与1.8GB/s,天壤之别啊!如果我们把这些生成的静态文件放到内存里缓存,效果不言而喻。
幸运的是Linux系统为我们提供了这样的解决办法,那就是tmpfs文件系统,tmpfs可以直接使用内存,同时在内存不够时使用swap分区来存储。另外需要注意的是tmpfs不具备持久性,重启后数据不保留,请务必注意,不过我们只用它来存储缓存文件,即使文件丢失也不影响网站访问,完全无风险。
wordpress如何使用tmpfs:
/dev/shm/是一个设备文件,它使用就是tmpfs文件系统(注意:在CentOS和Redhat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录,可以使用df命令查看),因为/dev/shm/这个目录不在硬盘上,而是在内存里,它就所谓的tmpfs。可通过命令 df -h 查看到,tmpfs默认大小为物理内存的一半,当然也可以根据实际情况调整。
首先为wordpress的缓存文件建立一个目录wpcache
# mkdir /dev/shm/wpcache
赋予读写执行权限
# chmod 1777 /dev/shm/wpcache
将tmpfs挂载到wordpress缓存插件生成的/cache目录下
# mount --bind /dev/shm/wpcache /home/wordpress/wp-content/cache
# ls -ld /dev/shm/wpcache
返回类似下面的内容说明挂载成功
drwxrwxrwt 3 www www 60 Jul 31 22:50 /dev/shm/wpcache
即可查到tmpfs的使用情况。
需要注意的两个问题:
  1. 根据实际情况(内存大小、文章数量)调整wordpress缓存插件的中的缓存页面到期时间,否则会占用太多内存;
  2. 注意添加swap分区,以防内存不够用时备用,4G物料内存以下设置swap分区大小为2G即可。
OK!来测试一下:感受一下,速度有没有更快一些呢?当然你也可以参考此方法运用在其它类型的网站程序上。
之前在网上看到有人在wordpress上使用memcache缓存模块来优化,咱这里也做了个测试,使用memcache缓存模块与使用共享内存/dev/shm的读写测试对比,不多说,自己看吧:
测试一:读取100000次数据 -------------------------------- //使用memcache
require_once 'tools/cache/memcached-client.php';
$mem = new memcached($options);
$mem->set('x' , '0');
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->get('x');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
连续运行三次脚本,结果分别为10.5,10.46,10.63
--------------------------------
//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_get_contents('/dev/shm/php_system/vipcache');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
连续运行三次脚本,结果分别为3.2,3.25,3.2
测试二:写入100000次数据 -------------------------------- //使用memcache $mem = new memcached($options); $time = microtime(TRUE); for ($i = 0 ; $i < 100000 ; $i++){ $mem->set('x' , '0'); } $end = microtime(TRUE); echo round($end - $time , 2); -------------------------------- 连续运行三次脚本,结果分别为10.93,9.22,9.41,与读取测试结果相差不大,说明memcache的读与写时间是差不多的
-------------------------------- //使用共享内存/dev/shm $time = microtime(TRUE); for ($i = 0 ; $i < 100000 ; $i++){ $data = file_put_contents('/dev/shm/php_system/vipcache' , '0'); } $end = microtime(TRUE); echo round($end - $time , 2); -------------------------------- 连续运行三次脚本,结果分别为2.5,2.52,2.53,写跟读的性能一样优越[/cpp] 测试结论:直接操作本地的共享内存,速度比memcache要快很多。
memcached缓存只需要下载object-cache放在wp-content目录下面即可。不用管它会自动启用。启用之后,会发现MYSQL查询数量大大减少。本博客首页减少近200次。相当可观。
以下代码可以查看数据库查询次数,你可以放在footer.php末尾。
<?php echo '查询:'.get_num_queries ().'次'; ?>

 另外最后说明的是,memcached必须开机启动,否则你的网站主机万一重启了,你的博客就打不开了(删除wp-content下面的object-cache.php,再重启即可重新访问)。
查看进程命令
ps -ef | grep memcached

结束直接是
kill 1230 //1230假设是你的memcached的进程ID

本文链接:https://www.it72.com/6556.htm

推荐阅读
最新回复 (0)
返回