WordPress优化,宝塔(BT)面板,CPU占用100%解决办法一例

看到多个人搜索,遭遇到宝塔面板安装WordPress遇到 CPU占用资源经常100%的情况

刚好我也遇到了一例,所以写出来,希望能帮到有需要的人

我的服务器配置

CPU: 双核

内存: 4G

数据库:MySQL 5.6.47

服务器:Nginx 1.16.1

CMS: WordPress5.4

本站使用的是WordPress。WordPress的速度非常非常非常糟糕,在只有几百篇文章的情况下,速度已经非常不理想。WordPress 太耗CPU,本站的思路是通过缓存降低使用CPU的频率,达到加速访问。

本站通过优化后,原本每次加载在16s左右优化到了2s左右。提高了八倍的速度。(本次教程不拿我的站点演示)

优化过程

为了提高速度,尝试了多种方法(原教程提供了多种思路,但本站仅提供我使用的几种方法):

memcached (缓存)

redis(缓存)

预缓存(wp-rocket插件)

现阶段最适合的优化

预缓存,使用wp-rocket插件,将html页面静态化,

原理也非常简单

那就是把网页文件预先生成html,直接保存在磁盘上

但是到了wordpress,提供了更多的优化方式:

比如访问方法:

  • 可以直接通过服务器的Rewrite访问,不经php,这样是最快的
  • 可以通过php,不经数据库
  • 也可以通过php,再经数据库
  • 也可以直接生成html静态的路径

缓存文件:

  • 可以是html
  • 可以是压缩的html(html.gz)
  • 可以是php格式的

存储介质:

  • 可以存在磁盘上
  • 也可以直接存在内存中

尝试的插件

试用过的插件有下面这些:

wp-rocket

wp-super-cache

WPJAM Basic

解决办法

因为我的服务器已经维护优化过了,当然也不可能重新倒回去再来一次吧。所以我找朋友要了台服务器,给他的博客优化一遍。

这是他的服务器配置,1H1G至于多少宽带就不知道了,但我只只知道用网站测速工具他的站点立马就爆了。

看似任务很艰巨,因为这配置不知道优化后会成什么样,死马当活马医吧,开干。

安装memcached和redis

先去他的网站管理里找到他博客站点,看一下他使用的PHP版本,emmm是php-70,所以我们现在就去软件商店里,找到php-70,设置→安装扩展→安装memcached和redis。等待安装好。

然后再去软件商店里找到memcached和redis,分别再安装一次。

 

用Bt(宝塔面板)的远程下载的功能来完成下载所需要的redis文件

方法一:ssh工具登录vps来下载一些必要的东西

SSH工具登陆VPS后,定位到你的网站根目录,比如网站目录:/www/wwwroot/r-blog.cn;运行下方命令定位到所需网站的根目录

cd /www/wwwroot/r-blog.cn #请修改成你自己网站的实际目录)

然后运行下方命令下载所需的文件

wget http://uploads.staticjw.com/ji/jim/predis.php

再运行下方命令修改权限

chown www.www ./predis.php

再运行下方命令下载前端缓存的PHP脚本

wget https://gist.githubusercontent.com/JimWestergren/3053250/raw/d9e279e31cbee4a1520f59108a4418ae396b2dde/index-with-redis.php

修改权限

chown www.www ./index-with-redis.php

再用下方命令替换原网站目录的文件index.php,回车确定(这里说下,你可以备份下你的原来的index.php文件 ,如果你要还原可以直接删除掉这个然后用原来的还原。)

mv index-with-redis.php index.php

至此大功告成,Redis缓存成功开启!做完这步,就开启了Redis来加速WordPress,这时远在美国机房的网站的WordPress速度照样飞快。

如果你不想登录ssh来运行这些命令,我们通过面板也是可以的。

方法二:利用宝塔板面下载

很多小白,压根不知道什么ssh登录工具,还要你去一些乱七八糟的网站下载ssh登录工具,万一带了病毒怎么办,去年连大名鼎鼎的Xshell 的官方都承认某些Xshell 的版本是有木马的。所以如果不需要ssh登录,尽量不要搞这玩意。

1、我们点击文件里面的远程下载的功能按钮

Bt(宝塔面板)安装wordpress并开启Redis加速

2、输入链接地址

我么在url地址这一栏输入链接地址

http://uploads.staticjw.com/ji/jim/predis.php

https://gist.githubusercontent.com/JimWestergren/3053250/raw/d9e279e31cbee4a1520f59108a4418ae396b2dde/index-with-redis.php

然后,我们点击确定可以了,我们可以刷新下这个目录,就可以看到下载的东西了。下载好,可以安装前面说的修改下权限

3、修改权限

Bt(宝塔面板)如何修改权限和所有者,首页我们要选中文件,然后在后面可以看到权限这个功能,然后点击下就可以了我们简单看下截图!

第四:调试修改index-with-redis.php的一些参数

根据自己需求修改index-with-redis.php,修改如下:

cf = 0;                         // 如果使用cloudflare,则设置为1
$debug = 1;                     // 如果希望查看执行时间和缓存操作,请设置为1
$display_powered_by_redis = 0;  // 如果要显示带有执行时间的powered by redis消息,请设置为1

其实改不改都可以,看具体情况。

替换index.php

(将原版的index.php替换成index-with-redis.php,也就是说把index.php备份并删除,将index-with-redis.php改名为index.php

ssh指令

mv index.php index.php_bk #替换到原来的index.php,也可以改nginx伪静态规则
mv index-with-redis.php index.php

宝塔直接操作就不演示了

很简单

1、缓存问题
index-with-redis.php中有注释

Appending a ?c=y to a url deletes the entire cache of the domain, only works when you are logged in
Appending a ?r=y to a url deletes the cache of that url
Submitting a comment deletes the cache of that page
Refreshing (f5) a page deletes the cache of that page

意思是


登录后台网站url后面加上?c=y即可刷新整个网站

可以在网站页面后面加上?r=y即可手工刷新

提交评论会自动刷新页面

刷新(f5)页面也可以刷新页面


2、测试结果
可查看本博客网页源码,我的数据是

  1. no cached: 0.965
  2. this is a cached: 0.00105

然后再去测试一下访问压力

再来对比刚刚测试的图。


在这里基本上已经完成了三分之一,如果你已经满意了可以停止继续,反之可以继续折腾下去。
第二步是安装memcached,考虑到文章查阅的体验,所以初步安装memcached的教程已经放在前面,当然你看到这里的时候memcached的软件已经安装好了。

安装插件

memcached插件有两个地方可以下载,我们可以访问github项目页面下载插件包:

https://github.com/tollmanz/wordpress-pecl-memcached-object-cache

下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启memcached缓存。

就是这个文件, object-cache.php,上传到 wp-content

或者我们去wodpress后台的插件库里下载MemcacheD Is Your Friend,只要后台搜索下既可默认下载安装就可以了。

PHP Memcached 扩展https://wordpress.org/plugins/memcached-is-your-friend/

值得说明的是,这里还有一个大坑等着你来踩:

WordPress官网上还有的object-cache.php虽然也号称Memcached 插件,然而它只支持Memcache,不支持新版的,所以不能使用。如果错误地将object-cache.php和Memcached混用的话,则会出现WordPress打不开,前台后台页面一片空白的现象。

安装batcache插件

batcache可以将整个页面缓存到内存中,下次直接从内存中取出html,完全不需要计算,所以速度非常快。下载解压后其实只有advanced-cache.php是有用的,而batcache.php是一个提供情况缓存的GUI入口,并无大用。

从官方下载插件包:https://wordpress.org/plugins/batcache/

然后解压得到 advanced-cache.php 上传到wp-content即可。

其中advanced-cache.php有一些自定义的选项可供配置:我们打开源代码编辑调成成下面的模式。

var $max_age =  3600; // 过期batcache项的时间超过此秒数(零表示禁用batcache)
var $remote  =    0; // 零禁用向远程数据中心发送缓冲区(从不发送req/sec)
var $times   =    2; // 只有访问此页面多次后才对其进行蝙蝠缓存…(两次或多次)
var $seconds =  0; // …在这几秒钟内(0表示忽略此项并立即使用batcache)

max_age代表缓存过期时间(以秒为单位),times表示访问多少次才创建缓存(2是最小值),seconds表示在多少秒之后才创建缓存(0表示立即)。

之后将advanced-cache.php上传到wp-content目录即可。

编辑博客根目录的wp-config.php 文件

上述所说步骤做完之后,编辑博客根目录的wp-config.php 文件,添加下方两段代码进去并保存:

define('ENABLE_CACHE', true);
define('WP_CACHE', true);

如下图所示:

 解析:define('ENABLE_CACHE', true);这段是激活Memcached; define('WP_CACHE', true);是激活Batcache;

然后测试一下访问压力。

再来对比刚刚测试的图。

效果不是很明显,因为每次测试的速度都不一样,但总体上来说还是有了一点加速提升1s左右吧。就这样,本教程就完成了三分之二了,基本上首页什么的已经可以接受大面积的访问压力。

 

如果你发现访问文章页面还会出现cpu暴涨的情况,请往下继续看!

wp-rocket插件缓存文章html页面,减少cpu使用率

因为本次优化的站点是一个刚搭建好的,那个网站本身就没有多少文章,但当你的站点发表了几百篇上千篇文章的时候,会发现每一次点击文章链接时,cpu都会被占用很多。

现在我们测压看看在批量访问文章页面的时候cpu会涨多少。

很明显,cpu再次暴涨(因为这个站点的文章量少,所以经过几次测试后才有了这个数据,按道理来说大型站点肯定会有这种情况),然后这里推荐wp-rocket插件,当然如果你有其他插件也是可以的,主要是缓存html页面

我这里给出一个破解版的连接,官方的收费emmm。自己舔吧(滑稽一下,博主写了那么久,大家还是回复查看吧)

[reply]https://r-blog.lanzous.com/ibr1suh[/reply]

然后把插件安装上去,插件自动开启预缓存模式(缓存html)。

然后我们再次去测压

总结

wordpress本身是个很优秀的cms,但是如果你不给他做缓存,那根本没法用。所以这里推荐选择用bt(宝塔)面板来安装wordpress并且开启缓存加速这样更适合小白用。不用再ssh端敲那些命令。

开启wp-rocket后爆卡原因分析

wp-rocket的预缓存不能进行特别的设置:

  1. 不能设置触发时机
  2. 不能设置触发时间
  3. 不能设置触发间隔时间
  4. 不能设置预加载时,使用的cpu核心数目
  5. 不能设置那些可以预加载,那些不能预加载
  6. ...............

wp-rocket预加载时,会同时使用多个cpu核心,导致整个占用资源100%,在大多数情况下,这是灾难性的,毕竟不是谁的服务器都是10核8核的

表示本人2h4g能带起wp-rocket插件,就不说什么了

个人建议

wp-rocket的加速效果很优秀,但是如果你使用后真的会卡死,还是建议使用wp-super-cache插件(在后台安装即可)

wp super cache在预加载时,只占用一个核心,在生成预缓存时,是一个一个页面缓存生成的,各个页面生成时,有间隔,最最主要的是,生成,只占用一个cpu核心,这样在后台更新预缓存时,不会影响到前台,后台的所有操作。

然后我们测试一下压力。

再来对比刚刚测试的图。

看到现在,WordPress的优化教程已经结束,可以看到首页和文章页面都已经被优化到0-2秒级别访问。

 

在讲几句,wordpress本身是个很优秀的cms,但是如果你不给他做缓存,那根本没法用。前期的WordPress站点看样子很流畅,但当你安装了各种插件和模板并且发表了很多文章之后,许多卡顿的毛病就会浮出水面。在这里建议各位在搭建WordPress并且发表文章之前,先维护优化好站点,否则日后出问题很难做维护。


本文章百分之95为若白博客|R-blog.cn原创,个别内容参考至

大鸟博客:Bt(宝塔面板)安装wordpress并开启Redis加速

SEO中文网:WordPress优化,宝塔(BT)面板Mysql,CPU占用100%解决办法一例

转载请保留本博客链接,表示尊重,谢谢各位。

Comments

  1. test
    12 months ago
    2020-4-23 10:54:26

    测试一下下

  2. zhicheng
    12 months ago
    2020-4-23 18:01:37

    请问下你是在哪个网站测速的喔,我也想去测测

  3. zhicheng
    12 months ago
    2020-4-23 19:43:17

    请问下,在wordpress里头还需要安装redis的插件吗?

    • YGRB Owner
      12 months ago
      2020-4-23 20:44:51

      建议用文件版,插件不是很好用

  4. zhicheng
    12 months ago
    2020-4-28 13:18:17

    想请教一下,像上面的话redis、memcached和super cache 3个缓存,是否可以同时使用不冲突?还有就是在用super cache的时候测试缓存显示:页面不相符!时间戳有差异或者不存在。是不是就表示没启用成功?

  5. zhicheng
    12 months ago
    2020-4-28 13:28:42

    额。。。还有咱们网站的话登录了,没反应~所以看不到你隐藏的那个链接~

    • YGRB Owner
      12 months ago
      2020-4-28 20:16:04

      嗯,这是缓存问题,当然程序肯定是会有点冲突,但我们现在看到的表面就是这个html页面被缓存了(我加了个腾讯cdn,之前你回复刷新有更新页面,但加了cdn页面就不会被刷新缓存,所以你看不到这个页面被更新)。

  6. 12 months ago
    2020-4-29 0:53:19

    来访看看

  7. zvxc
    11 months ago
    2020-5-07 17:57:56

    奥利给 1111

  8. takumi
    11 months ago
    2020-5-30 23:36:05

    还行!

  9. 若白
    2 months ago
    2021-2-13 18:58:28

    test测试一下

Send Comment Edit Comment

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next