神秘进程使用全部 RAM 导致机器崩溃 - 如何识别?

神秘进程使用全部 RAM 导致机器崩溃 - 如何识别?

我有一台 Linux 机器,运行大约 10 个内部编写的进程。

每隔一天(!),机器就会完全耗尽内存,进入交换区并失去响应。这种情况会在几秒钟内迅速发生,因此不可能一直看着机器死机。这是一次突然泄漏,而不是渐进式泄漏,因此 top(1) 不会给出任何即将发生不良事件的迹象。

识别哪些进程导致了问题的最佳方法是什么?

答案1

您可以研究禁用内存过量提交,这样内核就会终止泄漏的进程而不是机器。

您可以使用以下两个 sysctl 禁用过度提交:

vm.overcommit_ratio=60
vm.overcommit_memory=2

第一个数字取决于您有多少内存和多少交换空间。分配限制将是:

amount_of_swap + overcommit_ratio/100 * amount_of_ram

答案2

您可以使用以下命令为每个进程设置内存限制禁止使用 ulimit命令以防止它们占用所有系统内存。要获取通知,我建议使用监控监控每个进程的内存使用情况。

相关内容