AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 534355
Accepted
user6039980
user6039980
Asked: 2019-08-08 04:26:04 +0800 CST2019-08-08 04:26:04 +0800 CST 2019-08-08 04:26:04 +0800 CST

浏览某些网站时,什么会使 Linux 数分钟内无响应?

  • 772

我使用的是 Linux 4.15,当 RAM 使用量达到顶峰时,这种情况发生在我身上很多次——整个操作系统变得无响应、冻结且无用。我看到它唯一可以工作的是磁盘(主系统分区),它被大量使用。

我不知道这个问题是特定于操作系统、特定于硬件还是特定于配置。

有任何想法吗?

linux freeze
  • 8 8 个回答
  • 8606 Views

8 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2019-08-08T08:10:27+08:002019-08-08T08:10:27+08:00

    是什么让 Linux 如此迟钝?

    过度使用会导致大量交换的可用 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 的浏览器的总内存使用情况的正确方法。(虽然也有特定于浏览器的功能来显示内存使用情况,这将显示各个选项卡)。

    • 30
  2. Chase
    2019-08-08T12:01:03+08:002019-08-08T12:01:03+08:00

    AFAIK,英国媒体报道不应使操作系统无响应,所以我不会考虑甚至不接受英国媒体报道是问题的根本原因

    你不会喜欢这个,但我认为英国媒体报道是你的问题(虽然我不确定是内存还是磁盘是问题)。不幸的是,Linux 内核在处理高内存压力情况方面很糟糕,并且众所周知,一旦内存耗尽,基本上需要重新启动。有三件事让我相信你的问题是资源枯竭:

    1. 您在 root (/) 和 DATA 上的磁盘空间几乎已满。我不确定您使用 DATA 做什么,但我之前遇到过将根分区的大小调整得太小并且系统无法运行的问题。
    2. 您的内存压力很大,这意味着您的 RAM 几乎已满。当 RAM 开始变满时,您将开始出现页面错误。当内核无法为进程分配足够的内存并且必须使用某些系统速度慢得多的交换空间时,就会发生页面错误。这使我们得出最后的观察结果:
    3. 您的交换空间几乎已满。由于 RAM 和交换空间几乎都已满,因此您的系统显然存在较高的内存压力。

    基本上,将这三个放在一起,您的系统就没有足够的资源来做任何事情。不幸的是,Linux 处理低内存情况的能力很差(与 Windows 中的 NT 内核相比),但似乎就是这样。您可以在此 Reddit 线程及其链接邮件列表中找到更多讨论。

    至于如何解决您的情况,我会说增加您的交换大小是一个好主意,但是由于您的磁盘空间不足,这将是一个问题。除非您的 Minecraft 服务器有很多人,否则我认为将其内存减少到 1024m 左右是安全的(我个人使用 1024m 和大约 10 人,它工作正常)。我也会为您的 Minecraft 服务器使用龙头或纸张,因为它们往往性能更高。

    祝你好运!

    • 5
  3. Zach Sanchez
    2019-08-08T08:10:14+08:002019-08-08T08:10:14+08:00

    的输出是free -m什么?如果我们不知道您使用了多少内存,那么您拥有的内存量毫无意义。那我很想知道正在使用多少交换空间。

    不过,我确实认为您已经回答了自己的问题。如果您从不关闭它们,在浏览器中打开“许多选项卡”肯定会减慢系统速度,因为无论如何它们都会继续消耗内存;当您的系统冻结时,您一次打开了多少个?

    如果您的系统因其他内存密集型任务(例如“从非常复杂的 UML 图生成非常大的图形”)而死机,这也是有意义的。这绝对会减慢您的系统生成图表的速度,因此这不足为奇。

    听起来这确实是您的系统应该表现的方式。要么,要么我在这里遗漏了一些东西。

    顺便说一句,当您的系统变得无响应时,HDD 统计数据并不重要,因为内存不足几乎总是罪魁祸首。

    • 4
  4. Mr. Donutz
    2019-08-09T02:32:41+08:002019-08-09T02:32:41+08:00

    您的 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

    上述答案的来源,包括进一步的解释。我发现那篇文章对我来说很有帮助。

    • 4
  5. Boann
    2019-08-09T15:42:51+08:002019-08-09T15:42:51+08:00

    当我阅读标题时,我的第一反应是“内存不足”,因为我自己在 Linux 上也遇到过这个问题,在打开太多浏览器选项卡后 10 多分钟的疯狂磁盘抖动。我同意,这很糟糕,需要改进。Windows 可以更好地处理这种情况。

    一些建议:

    • 将内存监视器小程序添加到系统托盘中,以便您随时关注它。
    • 在 Firefox 的首选项中,将“内容进程限制”设置为“1”。正如设置下方的文字所说:“使用多个选项卡时,额外的内容进程可以提高性能,但也会使用更多内存。”
    • 删除或替换任何占用大量内存的浏览器插件。保留您的广告拦截器,因为广告比任何拦截器占用更多的内存。
    • 调查并可能删除任何其他需要大量内存的程序。

    但是,唯一真正的解决方案是购买更多 RAM。

    大量的 RAM 不仅可以防止这种灾难的发生,而且还可以让系统在 RAM 中建立一个大型文件缓存,而您的系统目前无法做到这一点,因为它运行得如此接近极限。大文件缓存将占用硬盘驱动器的工作,并使系统上的几乎每个操作都感觉更快。这很值得。

    • 4
  6. Old Uncle Ho
    2019-08-09T04:16:03+08:002019-08-09T04:16:03+08:00

    一些关于问题是如何引起、继续和发展的精彩讨论。我喜欢通过在初始计算机的设计中投入硬件和/或升级现有实现来解决您遇到的问题。你能,

    • 添加 RAM(32GB 适用于许多设置)

    • 用 SSD 替换您的硬盘驱动器

    • 为交换驱动器添加 SSD(固态驱动器)

    • 在 RAM 中创建交换分区(具有 32 GB 或更多 GB 的 RAM)

    • 获得更快的硬盘

    • 转移到具有更快处理速度和更宽/更快总线架构的系统。

    其中一些硬件升级/更换可能远低于 100 美元。这些并不特定于 Linux,也不是您的确切软件实现,但您使用的硬件似乎不足以完成您的任务。

    • 2
  7. Peter Cordes
    2019-08-11T02:36:19+08:002019-08-11T02:36:19+08:00

    通常它“只是”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可调参数设置为616GB RAM 和 NVMe SSD 上的 2GB 交换分区。您可以阅读有关调整交互延迟(与服务器吞吐量相反)的更多信息;任何指南都会提到该可调参数。

    但如果你有任何交换,Linux 将在调用 OOM 杀手之前使用它。 保持你的交换分区小,只要足够大,Linux 就可以将那些通常真的很长一段时间都不会使用的非常陈旧的废话分页出来。(例如内存泄漏!)

    我没有任何关于交换已满的问题。现代 Linux 可以很好地处理有限的交换空间。Chromium(我使用它而不是 firefox)有时会在打开数十个 Stack Overflow 选项卡时变慢,但是The Great Suspender是一个不错的插件,可以在您不使用它们时卸载选项卡。我认为这为我节省了大量内存,尽管它只会卸载您没有在文本框中输入任何内容的选项卡。它也可能适用于 Firefox。


    正如其他人所建议的那样,16GB 的 RAM 非常适合与 Linux 交互使用。 目前DRAM价格相对较低;在大约 1.5 年前飙升之后,它们大多再次下降。

    • 2
  8. Michael
    2019-08-09T17:56:13+08:002019-08-09T17:56:13+08:00

    浏览某些网站时,什么会使 Linux 数分钟内无响应?

    你没有正确使用 Linux。这在资源有限的机器上变得尤为明显。您不需要更多的 RAM,也不需要更快的处理器。

    背景:

    Almost every non-user program’s priority is 0.
    Almost every user program’s priority is 20.
    

    要“解决”您的问题:

    不理会非用户程序,但开始更改用户程序的优先级(良好级别),以免它们给您带来问题。编辑启动您的程序的内容以包含很好的级别,从通常不是问题到最严重的违规者。

    现实世界的例子:

    KMail:          nice -n 1 kmail -caption "%c" %i %m
    LibreOffice:    nice -n 2 libreoffice --writer %U
    Firefox:        nice -n 3 firefox %u
    WorstOffender:  nice -n 9 {i'm a bad program}
    

    您的 WorstOffender 仍然会在几分钟内变得无响应,这实际上是一个购买更好的盒子的问题,但它现在不会导致您的整个操作系统 (Linux) 以及您运行的其他所有东西也变得无响应。

    • -2

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve