通过使用所有的RAM神秘进程崩溃机器 – 如何识别?

我有一台在内部写入进程中运行〜10的Linux机器。

每隔一天(!)机器完全用完RAM,进入交换并且变得没有反应。 这种情况发生在几秒钟的时间内,所以坐在机器上直到它死亡是不可行的。 这是一个突然的泄漏,而不是一个渐进的泄漏,所以top(1)没有给出任何迹象表明可能会发生不好的事情。

确定哪个过程导致麻烦的最好方法是什么?

您可以查看禁用内存过度使用,以便内核可以杀死泄漏进程而不是机器。

您可以通过使用以下两个sysctl禁用overcommit:

vm.overcommit_ratio=60 vm.overcommit_memory=2 

第一个数字取决于你有多less内存和多less交换。 分配限制将是:

 amount_of_swap + overcommit_ratio/100 * amount_of_ram 

您可以使用bash ulimit命令为每个进程设置内存限制,以防止它们吃掉所有系统内存。 要获得通知,我build议使用监视来监视每个进程的内存使用情况。