在错误日志中包含请求的URI

时间:2016-09-11 09:07:41

标签: php

我目前正试图追踪内存大小已耗尽"错误,但由于多种原因,它证明是非常困难的。

  • 错误发生在不同的地方,似乎并不是一致的"这就是消耗内存的地方"点。
  • 记录此错误时,不包含堆栈跟踪。
  • 我不知道请求了哪个文件,这可能有助于缩小原因。

由于错误的性质,它似乎并没有被我的" catch-all"错误处理程序(虽然我可能做错了)

我想知道它是否至少可以在记录的错误中加入$_SERVER['REQUEST_URI']

1 个答案:

答案 0 :(得分:0)

原来,我正在做“全能”错误处理程序错误。

以下代码有助于解决我的问题:

register_shutdown_function(function() {
    ini_set("memory_limit","-1");
    $e = error_get_last();
    if( $e) {
        $info = "various debug info"; // as necessary
        error_log("[".$_SERVER['REQUEST_URI']."] - ".$info);
    }
});

这有助于缩小问题范围。

对于任何好奇的人,我遇到的问题是会话垃圾收集 - 由于服务器维护,有超过50万个会话需要清理,因缓冲查询将内存加载到内存中而容易溢出内存。这也解释了为什么它看起来如此随机......因为它是! GC是按概率调用的。我通过在用户请求上禁用会话GC并将其添加到我已经拥有的“常规清理”cron脚本来解决了潜在的问题。我还在查询中添加了LIMIT 1000,以避免将来出现此类失控问题。有点令人不寒而栗,认为有人可以轻松地通过创建一个绝对的会话数来对我的网站进行DDoS,然后等待24小时让它们过期......

相关问题