当我的机器内存不足时,我会出现意外行为。
我有一个带有 32GB RAM 的 Intel i7-6700,我正在运行带有 vanilla 4.14.8 内核的 Arch Linux。我在 SSD 磁盘上的加密 LVM 卷上有一个 32GB 交换。
在正常操作期间,我运行几个 QEMU/KVM 来宾以及其他东西(XFCE、Firefox 等)。正常的内存使用率约为 20-30%,几乎没有交换。
但是当我运行一些内存密集型的东西(例如7za a -md=29
压缩一个大文件)时,当内存使用率达到 100% 时系统挂起/冻结。键盘和鼠标完全停止响应,显示冻结,磁盘活动停止,与机器的任何 TCP 连接在 SYN 阶段挂起。从这种情况中恢复的唯一方法是重启机器。
在挂起之前的那一刻,可以看到几乎没有使用交换空间。当然,swap 是启用的,我没有使用任何与内存相关的特定 sysctl 设置(特别是,我的 vm.swappiness 的默认值为 60)。
我不明白的是:
我不是内核专家,但据我所知,系统不应该在内存不足时冻结/挂起。我希望看到的是:
7za
在内存耗尽时杀死所以实际上有 3 个独立的机制来防止内存耗尽,但它们似乎都失败了。我意识到可能有一些我不知道的微妙问题(即来宾 VM 中的内存膨胀、锁定的内存等),但我真的想不出任何可以解释我所看到的行为的东西。
有人可以解释这里发生了什么以及为什么?我只是错过了什么吗?我可以做些什么来确定性地防止挂起吗?
编辑:
我进行了一些差异测试,我发现:
问题似乎与 LVM 有某种关系。我在这两种情况下都使用了相同的物理分区,因此它也与磁盘无关。在测试期间,我将 vm.swappiness 保留为 60(默认)。
顺便提一下 - 在一个特定的测试中,我注意到在 htop 中,就在机器冻结之前,交换栏中出现了一个“缺口”。所以内核实际上开始使用swap,但它只持续了大约3秒。
这个问题应该很容易重现。 …
Linux 如何确定桥接设备的默认 MAC 地址?我知道它与 中的“bridge id”相同brctl show
,但它是如何计算的?当网络接口添加到网桥时,MAC 地址是否应该自动更改?