WordPress:由wp-db.php引起的允许内存耗尽

时间:2018-01-16 14:48:59

标签: php wordpress

这是一个WordPress网站,在浏览网站或信息中心时随机出现错误。它始终是相同的字节53248或8192.实际上是非常小的字节。但除了记忆力不足之外,还有其他事情要做。

我想某处有一个错误。它从第1896行引发/wp-includes/wp-db.php的错误:

$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 ) ) {
    while ( $row = mysql_fetch_object( $this->result ) ) {
            $this->last_result[$num_rows] = $row;
            $num_rows++;
    }
}

注意:为什么要进行投票?问题实际上是来自其他难以捕获的东西,而不是来自PHP或服务器配置。

3 个答案:

答案 0 :(得分:3)

最终答案和解决方案: 问题来自写得不好和价格过高(专业版)的插件。 终极会员: https://wordpress.org/plugins/ultimate-member/

此插件的设置中有一个选项。 “缓存用户”。无论是“是”还是“否”都无关紧要。该插件会为您拥有的每个用户在 wp_options表中创建一行。例如,我的网站有 17.000个用户,该插件将 17.000行添加到 wp_options 表中,如:

  • 缓存亚当用户 - 是
  • 缓存史密斯用户 - 否
  • 缓存John用户 - 是
  • 以及之上和之后......

这样就可以在wp_options表中创建17.000个额外的行。如果你有100.000个用户,那将是额外的100.000行。真是个暴行!像这个插件旨在破坏您的Web服务器。因此即使是6个Cpu核心和12 GB RAM也无济于事。一直得到Http 500错误。

停止此操作的唯一方法是编辑插件的源代码并删除更新wp_options表的行。然后从wp_options表中删除所有数据。

此前:

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm

   517.02 Mb php-fpm: pool www
   455.77 Mb php-fpm: pool www
     5.46 Mb php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
     0.35 Mb grep php-fpm

现在网站加载速度提高了5倍,没有任何500错误:

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm
26.21 Mb php-fpm: pool www
25.29 Mb php-fpm: pool www
24.99 Mb php-fpm: pool www
24.72 Mb php-fpm: pool www
24.28 Mb php-fpm: pool www
23.83 Mb php-fpm: pool www
23.16 Mb php-fpm: pool www
23.06 Mb php-fpm: pool www
22.25 Mb php-fpm: pool www
21.85 Mb php-fpm: pool www
18.76 Mb php-fpm: pool www
5.46 Mb php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
0.35 Mb grep php-fpm

答案 1 :(得分:2)

您的服务器配置为仅允许256 MB内存用于PHP进程。 Wordpress正在使用更多。您尝试分配的字节数(53248或8192)并不重要,因为您要求的内存超过允许的数量,所以您达到了限制。

您的数据库似乎太大了,wordpress需要更多内存来处理您的数据。请重新配置您的服务器(允许使用更多内存),或者提高wordpress开发人员的问题,以便代码只能运行256 MB。

答案 2 :(得分:0)

从此answer by Dawid Loranc

“问题是由iThemes Security插件引起的。我关闭它并且错误已经消失。如果我知道这个插件的哪个部分导致超出内存限制,我将更多地调查此问题并编辑此答案。“