Ubuntu 如果内存和交换用完,进程是否会自动终止?

Ubuntu 如果内存和交换用完,进程是否会自动终止?,ubuntu,memory,virtual-machine,swap,kill-process,Ubuntu,Memory,Virtual Machine,Swap,Kill Process,我有一台Ubuntu16.04虚拟机,用于在32核机器上并行运行的高计算成本作业(每个核1个,由GNU并行分配)。 在运行数小时到数天之后,我注意到一些内核被释放,相应的进程不再运行。根据htop,内存(~100GB)和交换(~1GB)几乎完全满了。但是,单独一个进程通常需要多个GB 发生了什么事?如果有更多可用内存,是否将未积极运行的进程调出并在以后继续?或者他们只是因为交换已经满而被杀 我宁愿手动停止进程并检索中间结果,也不愿让进程在数天的计算后被终止并丢失任何结果。 我无法在作业运行时增加

我有一台Ubuntu16.04虚拟机,用于在32核机器上并行运行的高计算成本作业(每个核1个,由GNU并行分配)。 在运行数小时到数天之后,我注意到一些内核被释放,相应的进程不再运行。根据
htop
,内存(~100GB)和交换(~1GB)几乎完全满了。但是,单独一个进程通常需要多个GB

发生了什么事?如果有更多可用内存,是否将未积极运行的进程调出并在以后继续?或者他们只是因为交换已经满而被杀

我宁愿手动停止进程并检索中间结果,也不愿让进程在数天的计算后被终止并丢失任何结果。
我无法在作业运行时增加内存,但我只是遇到了一些问题。在进程仍在运行时安装它是否有意义;希望自动增加交换空间并防止进程被终止?

默认情况下,Linux将为进程提供比系统中实际可用内存更多的内存()。许多内存分配,例如堆栈或mallocheap arenas,从未被充分利用,因此这允许系统在不遇到内存分配失败的情况下完成更多工作

然而,如果进程写入分配给它们的所有内存,那么内核就无法实现这一承诺。无法向进程返回错误,因为它只是一条写指令,因此内核必须终止进程。有一些启发式方法可以选择一个对系统来说并不重要的进程,但可以释放大量RAM,但并不总是产生好的结果


在您的情况下,您可能应该使用
vm.overmit\u memory=2
配置您的系统。这将禁用内存过度使用,内核将只分发实际由物理(RAM或交换)支持的内存。

Ok,因此不再由
htop
运行的进程可能会被终止?是的,这些进程已经消失。内核应该通过syslog/journal/dmesg记录详细信息。