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" 对我有用。
我最近注意到我的 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" 对我有用。