我最近从另一位开发人员那里继承了一个 Web 服务器设置。它基本上如下:
2 个运行 apache 2 的 Web 服务器 2 个运行 nginx 的负载均衡器 2 个运行 MySQL 的数据库服务器
大约每周一次,Apache Web 服务器都会对请求失去响应,负载均衡器最终会返回 504 网关超时。我登录到 Web 服务器并检查了它返回的正常运行时间:
18:40:49 up 5 days, 20:15, 1 user, load average: 122.37, 119.80, 107.57
与实例可用的进程数(8)相比,这个时间非常高。
为了尽快恢复正常,我重新启动了网络服务器,一切恢复正常:18:54:19 up 5 min, 1 user, load average: 0.11, 0.22, 0.10
我并不要求明确的答案,因为我应该进一步研究问题的根源,但我希望得到一些有关此问题的提示和建议:
- 您认为为什么会发生这种情况?
- 有哪些方法可以让我进一步研究这个问题,以便能够确定问题的根源?我需要一些关于在哪里和寻找什么的指示。
谢谢您的帮助。
答案1
通过重启即可解决的高负载可能是某种泄漏的征兆。如果内存使用量由于内存泄漏而增加,或者仅仅因为应用程序平台维护一些随时间增长的数据结构,那么服务器最终可能会进行大量交换。
这显然取决于很多因素,但我见过内存过于紧张的网络服务器表现出与您描述的一样的症状。
另一种可能性是,应用程序产生后台线程,由于某种原因,这些线程持续运行并消耗 CPU 时间或其他资源。
我强烈建议您向前任所有者询问可能消耗资源(内存和 CPU)的线索。如果服务器受到攻击,也可能会出现您描述的症状,但如果不知道服务器应该如何运行,就很难分辨出区别。即使攻击不是原因之一,您仍然需要了解应用程序才能调试问题。