WordPress网站出现Allowed memory size内存不足

WordPress网站前台或后台出现Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in xxx.php on line xxx的解决办法

错误的意思是:wordpress网站程序占用主机CPU和内存资源大,主机分配的可用内存满了,用完了,需要增加可用内存。

方法都要尝试,测试结果仅供参考

报错内容:

private function _do_query( $query ) {
if ( defined( ‘SAVEQUERIES’ ) && SAVEQUERIES ) {
$this->timer_start();
}

if ( ! empty( $this->dbh ) && $this->use_mysqli ) {
$this->result = mysqli_query( $this->dbh, $query );  此行报错
} elseif ( ! empty( $this->dbh ) ) {
$this->result = mysql_query( $query, $this->dbh );
}
$this->num_queries++;

if ( defined( ‘SAVEQUERIES’ ) && SAVEQUERIES ) {
$this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() );
}

搜索了很多国内外网站的解决方法,并且都进行了测试验证

方法一:

wp-congif.php

define(‘WP_MEMORY_LIMIT’, ’256M’);

如果还不行 256M改成512M

实际测试无效

 

方法二:

打开wp-includes目录下default-constants.php文件,找到如下代码(如果没有就新增):

// set memory limits
if ( !defined(‘WP_MEMORY_LIMIT’) ) {
if( is_multisite() ) {
define(‘WP_MEMORY_LIMIT’, ’64M’);
} else {
define(‘WP_MEMORY_LIMIT’, ’32M’);
}
}

if ( ! defined( ‘WP_MAX_MEMORY_LIMIT’ ) ) {
define( ‘WP_MAX_MEMORY_LIMIT’, ‘256M’ );
}

然后把define(‘WP_MEMORY_LIMIT’, ’32M’)中的32M修改为64M,或者增大96M 128M。

实际测试无效

 

方法三:

禁用插件

实际测试无效

 

方法四:

优化 数据库 PHP 性能

实际测试无效

 

方法五:

服务器内存提升

目前看2G内存不够使用,增加到4G

实际测试无效

 

方法六:

WordPress版本升高或者降低

实际测试无效

 

方法七:

PHP INI 基本设置 中修改可用内存大小,原来默认可用内存是256M,修改成512M即可

实际测试无效

 

实际问题:

数据库 发现wp-options表特别大,另外出现大量的menu cache

删除这些cache表之后网站恢复正常(数据库注意先备份)

不过继续追踪数据库,这些cache表还是继续产生!

服务器如果安装宝塔面板的话,可以进行下面优化:

引用网站:https://www.815494.com/html/2722.html

一、bt面板安装Memcached

PHP有很多的缓存扩展,对于wordpress而言,最常用的是Memcached和Redis,Memcached经常被用于DZ论坛和WP博客,强大的缓存功能,比插件强的不是一星半点。原先的时候,我一直认为安个WP Super Cache插件就行了,然而使用Memcached后,才发现其无比的强大,使用Memcached是小网站走向大网站的标志。

也安装使用了Redis,不知道什么原因,网页缓存速度降低了好几倍,所以还是Memcached+batcache是最给力的缓存组合。

1、进入宝塔面板,点击软件管理,点击php右边的设置,强烈推荐使用PHP7.0+以上
2、点击安装扩展,点击安装memcached,大约等个三四分钟,就安装好了,推荐opcache也同时安装。

二、上传缓存文件

下载上传两个文件,object-cache.php和advanced-cache.php,上传到网站目录wp-content,注意是wp-content下,不是插件目录plugins。

1、object-cache

这个文件主要是缓存内存,如数据库查询。右键另保存object-cache.php文件,上传到网站目录wp-content。

下载地址:https://github.com/tollmanz/wordpress-pecl-memcached-object-cache

点击本地下载>>

2、batcache

这是一个插件,Batcache可以获取多个Memcached缓存对象,速度极其快,下载的压缩包解压缩出来一个advanced-cache.php文件,也上传到wp-content目录下。

batcache下载地址:https://wordpress.org/plugins/batcache/

点击本地下载>>

3、wordpress插件栏里多出一个Drop-in高级插件(2),代表插件安装成功。

三、测试缓存生效

1、虽然扩展和插件都安装好了,还要测试缓存是否成功,先来看Memcached,宝塔面板-软件管理-运行环境-Memcached-设置-负载状态。

2、先刷新几个博客页面,再来查看负载状态,会发现命中率和失败率,就代表缓存成功了,数据库查询次数明显变少了,这是因为很多数据被Memcached缓存了,博客速度访问起来快的很多。

3、batcache要想生效的话,需要在博客根目录wp-config.php文件中,添加缓存代码能生效。

define(‘WP_CACHE’, true);

4、添加后缓存代码后,退出博客登录,然后刷新博客页面,在底部会出现下边类似的提示,代表缓存页面成功。

generated in 0.288 seconds
67244 bytes batcached for 300 seconds

四、调整参数设置

memcached设置简单,只需要在bt面板Memcached管理设置中,修改配置或性能调整就行,一般Memcached的设置不需要改动。

然而batcache的设置,要根据自己需求来设置,编辑advanced-cache.php,找到里边类似下列的内容。如果不经常改动内容的话,建议缓存寿命改长点,访问1次

var $max_age = 300; // Expire batcache items aged this many seconds (zero to disable batcache)

max_age表示缓存过期时间(以秒为单位),0表示禁用垃圾回收器,建议数值3600。

var $remote = 0; // Zero disables sending buffers to remote datacenters (req/sec is never sent)

remote为0表示禁用向远程数据中心发送缓冲,这个可以默认。

var $times = 2; // Only batcache a page after it is accessed this many times… (two or more)

times表示访问多少次才创建缓存,建议设置1。

var $seconds = 120; // …in this many seconds (zero to ignore this and use batcache immediately)

seconds表示在多少秒之后才创建缓存(0表示立即)。

五、安装缓存插件

轻量级热门缓存插件WP Fastest Cache

https://wordpress.org/plugins/wp-fastest-cache/

六、网站增加CDN加速

Cloudflare免费版

https://www.cloudflare.com

 

0
分享到: