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 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 83.27.211.107:36968] mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 77 bytes) in /var/www/vhosts/mywebsite/public_html/wp-includes/wp-db.php on line 1832

我尝试增加内存限制:

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

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

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

includes/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;
}

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

返回

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

并删除您 运行(上文)中的那些查询,然后查看该网站是否恢复正常。如果是,那就是问题所在;处理这些查询是一个不同的问题。

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

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

我在“wp-db.php on line 1832”和禁用 iThemes Security plugin 时遇到了同样的问题之前提到的对我来说效果很好。但是,如果您仍然需要保护您的网站,这不是解决方案。

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

转到 iThemes Security 设置 -> 文件权限(配置设置)并检查所有权限是否设置正确。一旦您按预期修复了权限,您将不会再看到该错误。

在 iThemes 安全中禁用 "Database Backups" 对我有用。