【问题标题】:php notifications causing massive loadphp通知导致大量负载
【发布时间】:2012-01-29 15:12:10
【问题描述】:

我们在负载平衡器后面有 3 个 drupal 网络服务器 (pressflow 6.22)。由于更新,我们收到了大量来自 php 的通知,而我们尝试修复这些我只是想禁用这些通知。所以我把 PHP.ini 从

error_reporting  =  E_ALL

error_reporting = E_ALL & ~E_NOTICE

我这样做后,机器上的负载猛增了 30 倍,数据库连接数翻了一番。

我一设置它就恢复正常。

我不明白如何隐藏通知会引起如此多的悲伤。过滤掉这些是否只是在 php 上增加了很多开销?

很多这些错误来自核心和主要模块,所以在某些情况下,我不想破解模块来修复通知,这是否意味着我只能忍受它们?

TIA

【问题讨论】:

  • 数据库连接的数量表明这可能与 Drupal 的数据库记录器 Watchdog 有关。尝试禁用数据库日志记录模块,看看会发生什么。 PHP 的错误报告绝对没有 理由去触碰数据库。
  • 感谢 Fuzzy,它不是看门狗,我已将其关闭并使用 syslog。数据库上的双倍是我收集的 apache 持有的东西,它不像有两倍的查询,它在 apache 上的负载是如此之高以至于它持有 DB

标签: php apache drupal-6


【解决方案1】:

嗯,在内部,通知仍然被触发,只是没有显示或记录。通常这不是问题,然而如果你定义了自己的 set_error_handler,那里的代码可能会搞砸……通常,它应该做类似 if($errno & error_reporting()){/* only then do something */} 的事情,但如果你定义你的自己的错误处理程序,您可能想要检查该代码(或发布它)。

【讨论】:

  • 我没有自己创建,只是使用默认的drupal一个:set_error_handler('_drupal_error_handler');其中有: if ($errno & (E_ALL ^ E_DEPRECATED ^ E_NOTICE)) {
  • 那是......邪恶......你能用error_reporting()替换(E_ALL ^ E_DEPRECATED ^ E_NOTICE)并再次检查性能吗?
  • 我试过了,但没有帮助。在那个drupal sub中,我只是做了“return”;它仍然没有帮助,因为似乎 php 只是将它们推送到 syslog。我在 php.ini 中尝试了 ~E_ALL ,但也没有用:(
  • 除非被告知,否则 PHP 不会记录它们...您是否 100% 确定您的错误报告级别没有在某处更改? error_reporting() 返回什么? php.ini 是第一个加载的,但是 webserver 配置、.htaccess 文件和代码本身都可以覆盖级别...
  • 是的,有一堆。我设法通过在 bootstrap.inc (error_reporting(0)) 中设置它 - 所以我不再被消息淹没了。负载仍然高于我想看到的但越来越近。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2015-09-24
  • 2015-08-09
  • 2012-09-25
  • 1970-01-01
相关资源
最近更新 更多