我注意到最近在我的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缓存和高负载