WordPress致命错误:在1832行的wp-includes/wp-db.php中允许536870912字节的内存耗


WordPress Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 77 bytes) in wp-includes/wp-db.php on line 1832

我注意到最近在我的WordPress网站我有时得到500内部服务器错误。我检查了日志,我有很多行,比如:

[Mon Oct 03 01:25:24.357439 2016] [fcgid:warn] [pid 12840] [client . cn[3.27.211.107:36968] mod_fcgid: stderr: PHP致命错误:允许的内存大小为536870912字节耗尽(试图分配77字节)在/var/www/vhosts/mywebsite/public_html/wp-includes/wp-db.php中上线1832

我试图增加内存限制:

define('WP_MAX_MEMORY_LIMIT', '512M');

define('WP_MEMORY_LIMIT', '512M');

甚至更多,但它不起作用。无论我设置什么,它仍然超出内存限制的一些字节。我认为有一个问题与一些查询数据库,但如何检查哪一个?

包含/wp-db.php的内容:

} else {
    $num_rows = 0;
    if ( $this->use_mysqli && $this->result instanceof mysqli_result ) {
        while ( $row = mysqli_fetch_object( $this->result ) ) {
            $this->last_result[$num_rows] = $row;
            $num_rows++;
        }
    } elseif ( is_resource( $this->result ) ) {
        // server crashing at line below
        while ( $row = mysql_fetch_object( $this->result ) ) {
            $this->last_result[$num_rows] = $row;
            $num_rows++;
        }
    }
    // Log number of rows the query returned
    // and return number of rows selected
    $this->num_rows = $num_rows;
    $return_val     = $num_rows;
}

这个问题是由iThemes Security插件引起的。我把它关掉了,错误消失了。如果我知道这个插件的哪个部分导致超出内存限制,我会进一步调查这个问题并编辑这个答案。

我有同样的问题与"wp-db.php在线1832"和禁用iThemes安全插件之前提到的对我来说很好。然而,如果你仍然需要保护你的网站,这不是解决方案。

您需要做的是修复关键区域的目录权限,如wp-content, wp-includes等…

转到iThemes Security settings -> File Permissions (Configure settings)检查是否所有权限都设置正确。一旦你修复了权限,你就不会再看到这个错误了。

禁用iThemes安全中的"数据库备份"

常数WP_MEMORY_LIMIT为WordPress的前端和后端所有PHP进程调节RAM。在共享主机上使用它。常数WP_MAX_MEMORY_LIMIT只调节后端RAM。当你知道你有足够的内存并且可以全部使用时,你可以使用WP_MAX_MEMORY_LIMIT,例如在你管理的VPS服务器上。

返回

define( 'WP_MAX_MEMORY_LIMIT' , '128M' ); define( 'WP_MEMORY_LIMIT' , '64M' );

和删除那些查询你正在运行(上面),看看网站是否回来了。如果是,那就是问题所在;处理这些查询是另一个问题。

如果这是共享主机,你正在用这些查询杀死服务器;如果这是你自己的服务器,你需要配置MySQL/PHP缓存和高负载