如何在开始交换时防止计算机冻结?


4

我是一名Java程序员,所以我经常需要同时运行多个程序,这会占用大量内存。

当我的内存已满并且Linux开始交换时,我的计算机几乎完全冻结了。我可以看到它在硬盘上大量写入,一切反应都非常缓慢,通常根本没有。在X中移动鼠标有时根本不起作用,有时它有几秒的延迟,点击通常有几分钟的延迟。有时可以更改为TTY(延迟很长),我通常可以毫不拖延地键入,但是当我尝试登录时,输入用户名需要几分钟才会出现密码提示,通常出现一条错误消息,告诉我登录超时。因此,唯一的可能性通常是重新启动计算机。

我注意到其他密集写入硬盘也会大大减慢我的电脑速度。有时,当我在自己的计算机上复制文件时,我使用rsync限制带宽,否则系统几乎无法使用。

怎么会这样?目前,完全关闭交换对我来说似乎更有用。这可能会导致某些进程崩溃,这是不幸的,但目前的替代方案是通过关闭计算机来崩溃所有进程。

我使用的是内核3.6.2-gentoo的Gentoo Linux,我在HDD上有一个10 GB的交换分区。


1
这是有趣的。当内存变满时,Linux不会开始交换,随着内存的填满,它会逐渐出现。看看swappiness。它会立即触及,还是减速是一个渐进的事情?
Darth Android

你知道你在那里有什么光盘和什么SATA版本?我很好奇,如果它是带宽 - 或 - 盘限制而不是交换。
nerdwaller

请注意,逐渐分页的行为是为了防止出现这种问题......调整swappiness会导致一次性表现非常糟糕。不是Darth暗示调整它,只是一个FYI,调整swappiness不是答案。用像iotop guichaz.free.fr/iotop这样的东西找到罪魁祸首可能有所帮助。
mgjk

我有一个类似的问题,其中一台核心i5计算机配有2GB内存和一个2.5“低转速驱动器,在交换时几乎没用。结束切换到带有更快磁盘的低端机器来解决问题。
ssmy

nerdwaller:lspci说00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller (rev 06)。hdparm说了些什么Gen1 signaling speed (1.5Gb/s),我找不到任何关于速度的说法。
cdauth

Answers:


1

对于任何UNIX / Linux系统,交换都是一件非常糟糕的事情。正如您所看到的,它需要严重的资源参与支持交换,尤其是磁盘系统。毕竟,系统正在将内存来回移动到磁盘,因此使用内存的其他程序可以运行。

如果在分析了系统中所有正在运行的程序并删除它们之后,您仍在交换,那么最好的方法是为您的计算机添加更多内存。


或者在问题上投入更多硬件之前确定原因。这可能更多是为了减慢IO而不是分页。
Hennes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.