因此,像大多数人一样,我曾经启用过交换。我首先来描述一下启用交换时发生的情况。
我正在开发一个应用程序,它有时会占用我所有的内存。然后系统几乎完全冻结,我认为这是由于频繁交换造成的。除非我冷重启系统,否则我几乎无法摆脱这种情况。
我尝试过swapoff -a
,但是现在,由于某种原因,当我使用了 3GB 中的 2GB 时,系统就会冻结。
我只是希望 Ubuntu 能够在系统冻结之前终止有问题的进程,这样它就不会冻结。
如何确定哪个是有问题的进程,这有点难说,但我认为简单地“杀死内存使用率最高的进程,不包括系统进程”对我的情况来说是好的行为。
有什么方法可以让 Ubuntu 做我想做的事吗?
笔记: 这条评论说我想要的是交换关闭时的默认行为,但这不是我观察到的。
答案1
默认情况下,Linux 有一个“oomkiller”(“内存不足终止程序”),它会尝试猜测哪个进程最应该被终止,并在必要时终止它。不幸的是,正如您已经说过的,做出正确的猜测相当困难,因此结果可能有些随机,包括冻结您的系统。
oomkiller 可以通过多种方式进行影响。检查这一页了解其如何运作以及如何影响它的更多细节。