我有一台在内部写入进程中运行〜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议使用监视来监视每个进程的内存使用情况。