如何找出哪个插件超出了内存限制?

时间:2013-06-16 作者:Joel G Mathew

今天我的网站停止运行时,我遇到了一个问题。调用链接只是显示了一条神秘的信息Database connection error, 在一台服务器上的所有网站上。重新启动时错误消失。

在试图找到问题的根源时,我检查了syslog(我使用的是Debian 7),发现了以下条目:

Jun 15 05:46:03 myserver suhosin[8368]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/mylocation/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:46:21 myserver suhosin[8372]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/mylocation/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:46:38 myserver suhosin[8368]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/mylocation/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:46:54 myserver suhosin[8376]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/mylocation/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:55:01 myserver /USR/SBIN/CRON[8508]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Jun 15 05:56:59 myserver suhosin[8514]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/joel.co.in/kgimoa.com/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:57:18 myserver suhosin[8516]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/joel.co.in/kgimoa.com/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
Jun 15 05:57:33 myserver suhosin[8514]: ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker \'myipx.y.z.a\', file \'/var/www/virtual/joel.co.in/kgimoa.com/htdocs/wp-content/plugins/wordfence/lib/wfUtils.php\', line 502)
错误会重复出现。

查看代码,第502行:

 public static function iniSet($key, $val){
                if(self::funcEnabled(\'ini_set\')){
                        @ini_set($key, $val);
                }
        }
这是因为我的一个插件/主题使用了过多的RAM吗?如何隔离和识别哪一个?除了逐个禁用每个插件并等待错误显示在syslog中之外,还有没有更快、更有针对性的方法?

2 个回复
SO网友:Otto

该错误并不表示插件使用了大量RAM。它说插件试图将内存限制提高到256M。这是两件不同的事情。

一个插件,甚至是核心代码,试图将内存限制调整得很高是很正常的,如果它认为它可能会做一些需要大量RAM的事情。例如,WordPress在进行图像处理时会这样做,因为大图像需要大量内存来临时处理。

在这种情况下,Wordfence插件似乎在某个地方有一行代码,该代码调用了iniSet函数,试图提高memory\\u限制。就是这样。并没有说它实际使用了其中的任何一种,设置一个更高的限制也不是特别不寻常。

SO网友:kaiser

信息本身来自Suhosin - “强化PHP项目”的一部分,该项目向您提供此错误日志消息。没什么好担心的,因为脚本所担心的不是内存量,而是插件试图提高限制的事实。你可以试着告诉你的主人为你停用这些消息,或者-如果你有这些能力-configure 你自己来吧。

结束