正如标题所述,我们在 AWS 上的 EC2 实例上运行了一个 NodeJS 应用程序,该应用程序偶尔会耗尽内存并终止进程。
从业务角度来看,这并不是什么障碍,因为冗余系统可以确保另一个实例启动并通过负载平衡器提供。但我们仍然想找出导致实例内存耗尽的原因,以便我们能够完全阻止这种情况的发生。
我们查看了与终止进程有关的日志,试图找出发生了什么,但由于没有可用内存,操作系统似乎无法在那段时间内写入任何日志。终止进程后,它会记录它已抑制了一些日志,然后继续正常运作。因此,我们假设日志抑制阻止我们获取有关问题实际原因的更多信息。
我们已经尝试关闭日志抑制,但在进程无响应期间它仍然不会记录任何内容,只是现在它不会报告它抑制的日志数量。
我们知道怎样才能找出导致进程内存耗尽的原因吗?
答案1
并终止该进程。
这第一的你需要做的就是停止内存耗尽。减少主机上的过量使用。
在 /etc/sysctl.d 中添加一个新文件,其中包含(最初):
vm.overcommit_memory = 2
vm.overcommit_ratio = 15
然后运行sudo sysctl -p
(您可能希望稍后调整比例)。
然后,您就可以开始寻找消耗大量内存的东西。