为什么即使所有占用大量资源的应用程序都退出后,Ubuntu 仍然运行缓慢

为什么即使所有占用大量资源的应用程序都退出后,Ubuntu 仍然运行缓慢

我已经思考这个问题很长时间了,我想我可以尝试在这里问一下。

设想:

  1. 我使用了一个占用大量资源的应用程序(例如图像批处理或编译/运行大量应用程序)

  2. 关闭占用大量资源的应用程序

  3. Ubuntu 的速度仍然比启动资源密集型应用程序之前慢得多*

* 我的意思是,“top”表示 CPU 使用率低,直到我做了一些事情(比如打开一个标签或其他事情)并且我的 CPU 使用率立即飙升。我在我拥有的多个 Ubuntu 机器上注意到了这一点。

我发现唯一的解决办法就是重启。这背后的原因是什么?

编辑:关于我的笔记本电脑的更多信息:Dell Studio 1558、Intel i5、8GB DDR3 Ram、7200 rpm HDD

答案1

这确实是一种典型情况,最可能的原因是内存交换。查看内存使用情况。

您的资源密集型任务 A 可能已占用大量 RAM。因此,另一个应用程序 B 已交换到磁盘。CPU 可以快速将其上下文从 A 切换回 B,退出 A 后您不会感觉到 CPU 负载造成的任何延迟。但是,应用程序 B 不再完全占用物理 RAM。因此,A 中的琐碎任务可能需要将应用程序 A 使用的内存加载回物理 RAM。

由于 Linux 通常使用内存来缓存磁盘 I/O,因此当资源密集型任务从 HDD 读取和写入许多/大文件时,也会发生类似的情况。(这意味着,任务 A 将在文件提交到物理 HDD 之前退出。缓慢的写入过程被延迟,直到 Linux 需要为其他应用程序释放内存。)

这两个过程(交换和磁盘缓存)都是 I/O 密集型的(受限于 HDD 读写速率,而不是 CPU)。但是,它们可能会导致一定的计算开销。

理论上,退出 A 一段时间后,应用程序 B 应该会自动恢复正常速度。重新启动应用程序 B 可能比重新启动更有帮助。

答案2

造成这种情况的原因可能有几个。如果您使用的是单核处理器且 RAM 相对较低,则更有可能发生这种情况。

可能发生的情况是:

  • 当 RAM 超载时,您的系统开始使用交换,在您关闭重型应用程序之前,它可能会出现“抖动”(将 RAM 转储到磁盘),然后很难恢复。
  • 您可能正在经历高水平的 I/O 等待(处理器等待响应)。
  • 您退出的繁重应用程序将被清理。最好的办法是让系统休息一会儿 - 然后等待它恢复。

答案3

如果您的系统交换过于频繁,调整该swappiness值可能会有所帮助。如果您实际上内存不足并且内核被迫进行交换,则调整该值不会有帮助,但是如果您有足够的内存并且内核开始不必要地进行交换,则调整该值可能会有帮助。

Ubuntu SwapFaq. 摘录如下:

swappiness 参数控制内核将进程从物理内存移出并移至交换磁盘的趋势。由于磁盘比 RAM 慢得多,因此如果进程过于频繁地移出内存,这会导致系统和应用程序的响应时间变慢。

  • swappiness 的值可以在 0 到 100 之间
  • swappiness=0 告诉内核尽可能避免将进程交换出物理内存
  • swappiness=100 告诉内核积极地将进程从物理内存中交换出来,并将其移至交换缓存

Ubuntu 中的默认设置是 swappiness=60。降低 swappiness 的默认值可能会提高典型 Ubuntu 桌面安装的整体性能。建议使用 swappiness=10,但您可以随意尝试。注意:Ubuntu 服务器安装与桌面系统的性能要求不同,默认值 60 可能更合适。

答案4

关于消耗所有内存,有一个类似的问题这里

正如有人回答的那样,

看来,一旦 Ubuntu 开始使用交换,即使操作完成后它也不会轻易释放 RAM。

要强制系统将交换分区中的所有内容释放回内存,有许多类似的答案可以做到这一点:

根据以上答案,您可以通过以下方式清除交换:

sudo swapoff -a
sudo swapon -a

这将禁用交换,在此期间交换中的任何内容都会转移到 RAM 中,然后重新启用它。计算机的性能现在应该恢复正常了。

有关swapoff和 的更多信息swapon,请参见以下链接中的手册页:

Ubuntu 手册页:swapon、swapoff - 启用/禁用分页和交换的设备和文件

相关内容