我是一名 Java 程序员,因此我经常需要同时运行几个消耗大量内存的程序。
当我的内存已满并且 Linux 开始交换时,我的计算机几乎完全冻结。我可以看到它在硬盘上大量写入,并且所有东西的反应都非常缓慢,通常根本没有反应。在 X 中移动鼠标有时根本不起作用,有时会延迟几秒钟,单击通常会延迟几分钟。有时可以切换到 TTY(延迟时间较长),在那里我通常可以无延迟地打字,但是当我尝试登录时,输入用户名后需要几分钟才能出现密码提示,并且通常会出现一条错误消息,告诉我登录已超时。所以唯一的可能性通常是重新启动计算机。
我注意到其他对硬盘的密集写入也显著降低了我的电脑速度。有时,我在自己的电脑上复制文件时使用 rsync 来限制带宽,否则系统几乎无法使用。
怎么会这样?目前,我认为完全关闭交换似乎更有用。这可能会使某些进程崩溃,这很不幸,但目前的替代方案是通过关闭我的计算机使所有进程崩溃。
我正在使用内核为 3.6.2-gentoo 的 Gentoo Linux,我的硬盘上有一个 10 GB 的交换分区。
答案1
对于任何 UNIX/Linux 系统来说,交换都是一件非常糟糕的事情。正如您所看到的,支持交换需要大量资源,尤其是对于磁盘系统而言。毕竟,系统会将内存来回移动到磁盘,以便其他使用内存的程序可以运行。
如果在分析了系统中所有正在运行的程序并将其删除之后,您仍在进行交换,那么最好的方法是为您的机器添加更多内存。