今天,我们的 Web 服务器 CPU 负载非常高。我们的应用程序卡住了,没有反应。我们可以通过设置最长执行时间从 180 秒缩短至 90 秒。
但是,日志文件现在充满了以下错误:
Maximum execution time of 90 seconds exceeded {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0):
大约每隔 10 秒,日志中就会出现一个此类新错误。
我们的应用程序的任何表单和脚本都不应该花费这么长的执行时间。因此,我的问题是,此错误日志是否可能是攻击(例如 DDoS)的迹象?此外,是否有机会找出触发错误的客户端的 IP 地址?
答案1
但是,日志文件现在充满了以下错误:
您已经告诉 PHP 终止所有运行时间超过 90 秒的脚本,因此这就是您得到的结果。
我们的应用程序的任何表单和脚本都不应该花费这么长的执行时间。
理论和实践有时会出现分歧。您应该认真调试问题 - 找出长时间运行的脚本并找出其原因 - 深入日志和 URL/cookie/标头分析,可能还要提高日志级别。
所以这似乎不是应用程序本身的问题。
这是一个非常危险的假设。很可能攻击仍在继续。目前,在攻击者真正找到安全漏洞之前,可能还有时间修复问题(高负载可能导致竞争条件,进而可能打开循环漏洞)。至少,您的网站将得到一些针对 DoS 的强化。
答案2
您必须调试脚本,放置计时元素并添加到一些调试日志中。我怀疑这是一次攻击,可能是脚本中出现了一些未预料到的循环。我编写的脚本中没有捕获错误条件,并创建了一个未预料到的循环。我的猜测是,这正是正在发生的事情。
答案3
假设您的应用程序是完美的,并且无法确定问题的原因,您唯一的希望就是像 Akamai 或 Cloudflare 这样的商业正常运行时间保护服务。