我的经验是,在物理内存耗尽之前,Linux 可以正常工作。一旦使用交换空间,性能就会严重下降并且 GUI 变得无响应。
这个问题不限于特定的发行版或桌面,因为我已经尝试了一些(问题仍然存在)。
我该怎么办?
我一直不明白为什么高磁盘 I/O 会如此减慢系统速度。这对我来说很奇怪,因为我预计减速只会影响那些依赖于硬盘/光驱数据的进程,但减速甚至会影响加载到 RAM 上的内容。我在这里指的是iowait。
为什么处理器要等待,而不是做其他工作?谁能解释这个限制以及为什么它没有在 Linux 内核中解决?有没有没有这个问题的内核?
我注意到当我编写大量应用程序时,整个系统会变慢。为了进一步测试,我运行它来执行(相对)低 CPU、高磁盘活动:
john -incremental > file_on_SSD
Run Code Online (Sandbox Code Playgroud)
这会每秒向我的系统磁盘上的文件中输出数万个字符串。
当它这样做时,鼠标滞后,TTY 变得无响应,应用程序“消失”并且通常整个计算机变得无法使用。当我最终可以 Control+C 时john
,系统会在几秒钟后恢复到最大强度。
这是一个极端的例子,但我也有类似的问题,比如从快速源复制大文件或转码等写入密集型活动略少。
我的主操作系统磁盘是一个非常快的 SSD(OCZ Agility 60GB),带有 EXT4。如果我john
使用 EXT4将的输出写入机械磁盘,我不会遇到同样的减速,尽管速度要慢得多(SSD 每秒执行约 42,000 个字,机械执行 8,000 w/s)。吞吐量可能是相关的。机械盘也与系统无关。这只是数据。
我使用的是 2.6.35-2 内核,但自从我得到这个 SSD 以来我就注意到了这个问题,当时我可能正在使用 .31 或大约那个时候的东西。
那么是什么导致了放缓?EXT4问题?内核问题?固态硬盘问题?上述所有的?还有什么?
如果您认为我需要运行额外的测试,只需发表评论告诉我该怎么做,我会将结果附加到问题中。
我刚刚dot
用一个输入文件执行(一个绘制有向图的程序),该文件太大以至于无法在合理的时间内呈现。
我的整个系统都僵住了。我几乎不能使它与文本控制台Ctrl+ Alt+F1杀dot
,但花了几分钟的时间。
为什么系统允许这样的事情?为什么它提供一个非关键程序,例如dot
系统的 99%,而使用剩余的 1% 来保持响应?