我没有任何关于交换已满的问题。现代 Linux 可以很好地处理有限的交换空间。Chromium(我使用它而不是 firefox)有时会在打开数十个 Stack Overflow 选项卡时变慢,但是The Great Suspender是一个不错的插件,可以在您不使用它们时卸载选项卡。我认为这为我节省了大量内存,尽管它只会卸载您没有在文本框中输入任何内容的选项卡。它也可能适用于 Firefox。
正如其他人所建议的那样,16GB 的 RAM 非常适合与 Linux 交互使用。 目前DRAM价格相对较低;在大约 1.5 年前飙升之后,它们大多再次下降。
过度使用会导致大量交换的可用 RAM 绝对可以做到这一点。请记住,机械硬盘上的随机访问 I/O 需要移动读/写磁头,每秒只能进行大约 100 次寻道。
如果您“过多”地过度使用 RAM,Linux 通常会完全出去吃午饭。我还有一个旋转磁盘和 8GB RAM。我遇到了一些内存泄漏软件的问题。即它们的内存使用量会随着时间的推移不断增长,并且永远不会缩小,因此控制它的唯一方法就是停止软件然后重新启动它。根据我在此期间的经验,如果您正在生成 3GB+ 的交换,听到超过 10 分钟的延迟我并不感到惊讶。
您不一定会在所有交换空间超过 3GB 的情况下看到这一点。理论说关键概念是捶打。另一方面,如果您试图在两个不同的工作集之间切换,并且需要交换 3GB 的数据,那么在 100MB/s 时,即使 I/O 模式可以完美优化,也至少需要 60 秒。在实践中,I/O 模式远非最佳。
在遇到困难之后,我将交换空间重新格式化为 2GB(比以前小几倍),因此系统无法进行深度交换。您甚至可以在不调整分区大小的情况下执行此操作,因为
mkswap
它需要一个可选的大小参数。粗略的平衡是在内存不足和进程被杀死之间,以及让系统挂起这么长时间以至于你放弃并重新启动之间。不知道4GB的swap分区是不是太大了;这可能取决于你在做什么。重要的是要注意磁盘何时开始搅动,检查您的内存使用情况并做出相应的响应。
检查多进程应用程序的内存使用情况很困难。要查看每个进程的内存使用情况而不重复计算共享内存,您可以使用
sudo atop -R
、按M和m,然后查看 PSIZE 列。您也可以使用smem
.smem -t -P firefox
将显示所有 Firefox 进程的 PSS,然后显示总 PSS。这是测量基于 Firefox 或 Chrome 的浏览器的总内存使用情况的正确方法。(虽然也有特定于浏览器的功能来显示内存使用情况,这将显示各个选项卡)。你不会喜欢这个,但我认为英国媒体报道是你的问题(虽然我不确定是内存还是磁盘是问题)。不幸的是,Linux 内核在处理高内存压力情况方面很糟糕,并且众所周知,一旦内存耗尽,基本上需要重新启动。有三件事让我相信你的问题是资源枯竭:
基本上,将这三个放在一起,您的系统就没有足够的资源来做任何事情。不幸的是,Linux 处理低内存情况的能力很差(与 Windows 中的 NT 内核相比),但似乎就是这样。您可以在此 Reddit 线程及其链接邮件列表中找到更多讨论。
至于如何解决您的情况,我会说增加您的交换大小是一个好主意,但是由于您的磁盘空间不足,这将是一个问题。除非您的 Minecraft 服务器有很多人,否则我认为将其内存减少到 1024m 左右是安全的(我个人使用 1024m 和大约 10 人,它工作正常)。我也会为您的 Minecraft 服务器使用龙头或纸张,因为它们往往性能更高。
祝你好运!
的输出是
free -m
什么?如果我们不知道您使用了多少内存,那么您拥有的内存量毫无意义。那我很想知道正在使用多少交换空间。不过,我确实认为您已经回答了自己的问题。如果您从不关闭它们,在浏览器中打开“许多选项卡”肯定会减慢系统速度,因为无论如何它们都会继续消耗内存;当您的系统冻结时,您一次打开了多少个?
如果您的系统因其他内存密集型任务(例如“从非常复杂的 UML 图生成非常大的图形”)而死机,这也是有意义的。这绝对会减慢您的系统生成图表的速度,因此这不足为奇。
听起来这确实是您的系统应该表现的方式。要么,要么我在这里遗漏了一些东西。
顺便说一句,当您的系统变得无响应时,HDD 统计数据并不重要,因为内存不足几乎总是罪魁祸首。
您的 htop 输出表明您对 RAM 的需求高于其容量(总 RAM+SWAP)。因此,显而易见的首要考虑是减少 RAM 使用或增加 RAM 可用性。
请注意,由于窗口/选项卡被赋予进程和内存空间的方式,现代的 firefox 版本非常消耗资源。这个想法是为了避免让整个浏览器崩溃的标签页。这玩意儿值这价吗?谁能告诉...无论如何,由于上述原因,我遇到了类似的问题,因为我的 Pentium 4 主板仅支持 2GB 的 RAM。为了避免可能的内存耗尽崩溃,我在备用 SSD 上添加了约 800M 的交换空间,显然是为了尽可能少地使用它。我通过更改一个称为 swappiness 的设置来实现这一点,它决定了内核对交换内存页面的渴望程度。一些有用的命令如下。
检查当前的swappiness:
cat /proc/sys/vm/swappiness
这很可能会为您提供 60 左右的结果,这对于负载较低的系统上的最大性能来说是相当高的。对您而言,显然这会适得其反,因此您可以使用命令
sysctl vm.swappiness=1
更改设置,例如在系统运行时更改设置。要保存这些更改,您必须查找文件
/etc/sysctl.conf
. 在该文件中,更改值或添加行vm.swappiness=1
.请注意,这不是您的解决方案,但应该是一个可用的解决方法。
学分 https://askubuntu.com/questions/103915/how-do-i-configure-swappiness
上述答案的来源,包括进一步的解释。我发现那篇文章对我来说很有帮助。
当我阅读标题时,我的第一反应是“内存不足”,因为我自己在 Linux 上也遇到过这个问题,在打开太多浏览器选项卡后 10 多分钟的疯狂磁盘抖动。我同意,这很糟糕,需要改进。Windows 可以更好地处理这种情况。
一些建议:
但是,唯一真正的解决方案是购买更多 RAM。
大量的 RAM 不仅可以防止这种灾难的发生,而且还可以让系统在 RAM 中建立一个大型文件缓存,而您的系统目前无法做到这一点,因为它运行得如此接近极限。大文件缓存将占用硬盘驱动器的工作,并使系统上的几乎每个操作都感觉更快。这很值得。
一些关于问题是如何引起、继续和发展的精彩讨论。我喜欢通过在初始计算机的设计中投入硬件和/或升级现有实现来解决您遇到的问题。你能,
添加 RAM(32GB 适用于许多设置)
用 SSD 替换您的硬盘驱动器
为交换驱动器添加 SSD(固态驱动器)
在 RAM 中创建交换分区(具有 32 GB 或更多 GB 的 RAM)
获得更快的硬盘
转移到具有更快处理速度和更宽/更快总线架构的系统。
其中一些硬件升级/更换可能远低于 100 美元。这些并不特定于 Linux,也不是您的确切软件实现,但您使用的硬件似乎不足以完成您的任务。
通常它“只是”X11 变得无法使用。要从键盘上击键到程序,并让它在屏幕上显示任何内容,必须运行几个不同进程中的代码。(X 服务器从内核获取击键,xterm 或等价物获取事件并决定绘制某些内容,然后向 X 服务器发送消息以从字体中绘制字形。)
只需在带有 Web 浏览器的窗口上挥动鼠标,显示带有一堆 Javascript 废话的页面,就会导致一堆进程的一堆消息,所有这些都会导致这些进程被唤醒并接触一堆数据。大概包括一堆“缓存”的未压缩位图。因此,这很可能会驱逐更多很快需要的东西。
ctrl+alt+F2 切换到另一个虚拟控制台通常可以在某些东西导致交换抖动时登录并运行 shell 命令,延迟时间只有几秒钟。 只是
bash
; Linux 内核不可交换,它拥有所有的 VT 和键盘<->TTY 代码。
如果交换确实非常糟糕,则此按键可能需要一些时间才能执行任何操作。X 服务器,而不是内核,必须在将视频硬件恢复到正确模式后接收该击键并从其自己的 VT 切换。内核仍在寻找 Alt+SysRq 组合键,但没有别的。但是一旦你切换到文本控制台,通常在打字和屏幕上显示字符之间最多有 1 个用户空间进程。
如果您的 X 服务器实际上被锁定,那么 ctrl+alt+F2 可能根本不起作用。
为了避免在你没有真正挣扎时减速,减少“swappiness”会有所帮助。例如,我在我的桌面上将
/proc/sys/vm/swappiness
可调参数设置为6
16GB RAM 和 NVMe SSD 上的 2GB 交换分区。您可以阅读有关调整交互延迟(与服务器吞吐量相反)的更多信息;任何指南都会提到该可调参数。但如果你有任何交换,Linux 将在调用 OOM 杀手之前使用它。 保持你的交换分区小,只要足够大,Linux 就可以将那些通常真的很长一段时间都不会使用的非常陈旧的废话分页出来。(例如内存泄漏!)
我没有任何关于交换已满的问题。现代 Linux 可以很好地处理有限的交换空间。Chromium(我使用它而不是 firefox)有时会在打开数十个 Stack Overflow 选项卡时变慢,但是The Great Suspender是一个不错的插件,可以在您不使用它们时卸载选项卡。我认为这为我节省了大量内存,尽管它只会卸载您没有在文本框中输入任何内容的选项卡。它也可能适用于 Firefox。
正如其他人所建议的那样,16GB 的 RAM 非常适合与 Linux 交互使用。 目前DRAM价格相对较低;在大约 1.5 年前飙升之后,它们大多再次下降。
你没有正确使用 Linux。这在资源有限的机器上变得尤为明显。您不需要更多的 RAM,也不需要更快的处理器。
背景:
要“解决”您的问题:
不理会非用户程序,但开始更改用户程序的优先级(良好级别),以免它们给您带来问题。编辑启动您的程序的内容以包含很好的级别,从通常不是问题到最严重的违规者。
现实世界的例子:
您的 WorstOffender 仍然会在几分钟内变得无响应,这实际上是一个购买更好的盒子的问题,但它现在不会导致您的整个操作系统 (Linux) 以及您运行的其他所有东西也变得无响应。