标签: swap

Linux 在内存不足时挂起

当我的机器内存不足时,我会出现意外行为。

我有一个带有 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)。

我不明白的是:

  • 为什么内核不使用交换空间?
  • 为什么当内存耗尽时 oom-killer 不会启动?

我不是内核专家,但据我所知,系统不应该在内存不足时冻结/挂起。我希望看到的是:

  • 当有可用的交换空间时,在内存和交换都被消耗(在我的情况下,64G)之前,不应杀死任何进程。
  • 即使没有交换,oom-killer 也应该7za在内存耗尽时杀死
  • 即使没有上述两种情况,任何尝试分配比可用内存更多的内存的进程都应该出错并正常失败。

所以实际上有 3 个独立的机制来防止内存耗尽,但它们似乎都失败了。我意识到可能有一些我不知道的微妙问题(即来宾 VM 中的内存膨胀、锁定的内存等),但我真的想不出任何可以解释我所看到的行为的东西。

有人可以解释这里发生了什么以及为什么?我只是错过了什么吗?我可以做些什么来确定性地防止挂起吗?

编辑:

我进行了一些差异测试,我发现:

  • LVM 卷上的加密交换 => 机器冻结。
  • 分区上的加密交换 => 一切正常(交换按预期使用,机器不会冻结)。

问题似乎与 LVM 有某种关系。我在这两种情况下都使用了相同的物理分区,因此它也与磁盘无关。在测试期间,我将 vm.swappiness 保留为 60(默认)。

顺便提一下 - 在一个特定的测试中,我注意到在 htop 中,就在机器冻结之前,交换栏中出现了一个“缺口”。所以内核实际上开始使用swap,但它只持续了大约3秒。

这个问题应该很容易重现。 …

memory linux freeze swap

6
推荐指数
1
解决办法
1406
查看次数

Linux 中不必要的交换

似乎有时,我的计算机会开始不必要地交换(内存使用率约为 25%),我不知道为什么。

运行 Perl 脚本时似乎最常发生这种情况,但这些不是密集型脚本,而且我找不到任何说 Perl 只能看到一定数量内存的说法。脚本完成后,swap 使用仍然存在,甚至在关闭 Firefox、Banshee 等之后。重新启动 X 有时可以解决问题,但有时需要完全重新启动。

这对我来说变成了一个大问题,因为一旦任何东西开始交换,其他一切似乎也一样。关闭程序或切换视点等基本操作需要的时间越来越长。如果不加检查,这种交换使用最终将迫使我的计算机无限期地颠簸,甚至无法响应击键!

我正在运行 Ubuntu 9.04、2.6.28-15 内核,我有 4GB 的 RAM,并且通常使用率约为 25%。

我也试过降低“swappiness”,但没有运气。

linux swap

5
推荐指数
1
解决办法
1531
查看次数

顶部内存百分比(linux)

就是想

(1) 进程顶部的内存百分比是相对于内存还是相对于内存+交换?

(2)如果是前者,我怎样才能得到后者?反之亦然。

(3) 要确定运行另一个可执行文件是否合适,我应该只查看内存还是内存+交换?或者例如在哪些情况下我应该考虑哪些?

(4) 粗略地说,内存(或内存+swap)使用到什么程度,我最好等待而不是提交另一个作业(当然不是很小)?

感谢致敬!

memory linux swap top

5
推荐指数
1
解决办法
6407
查看次数

如何解释 Windows XP 的虚拟内存信息 - 10 个数字和 1 个图形

如何解释 Windows XP 虚拟内存信息中的数字?我实际上只是对以下内容感兴趣:

1) 与“未触及”物理 RAM 中的空闲总大小是多少,因此系统根本不会交换

为了进行实验,我使用 Windows 7 设置了一个虚拟机,运行 Windows XP,内存为 768MB。 为简单起见,虚拟内存设置为“0”(不要使用任何页面文件)。 以下是系统信息和图表:

替代文字

那么 145MB(大约)是“未触及的”物理 RAM 吗?实际上有一个案例,当这个数字大约为120MB时,XP在任务栏弹出一个小气球,说“虚拟内存不足”。我相信我正在运行的小应用程序应该只请求几 MB。所以 120MB 应该足够了。所以我想知道为什么会这样。

其他数字呢?

785904
145432 (listing here to make a complete list)
128436

29312
23620
5692

25
740252
735132

582MB (the bar for PF Usage)

and the horizontal line for "Page File Usage History"
Run Code Online (Sandbox Code Playgroud)

现在,既然虚拟内存设置为“不使用任何页面文件”,那么 PF Usage 不应该是 0 吗?那么“页面文件使用历史记录”的水平线应该始终保持在 0 吗?谢谢。

更新: 假设页面文件是固定的 256MB 文件大小,并且信息也如上图所示,那么这 10 个数字如何解释?

在这种情况下,如果“可用”下降缓慢,现在仍然是 120MB,那么应该意味着根本没有使用页面文件?

windows-7 swap pagefile virtual-memory

5
推荐指数
1
解决办法
1467
查看次数

将特定进程的页面从交换中取出

我想知道是否可以将特定进程中的页面带入主内存,或者为给定进程或进程类设置参数以便它不会被换出。

linux swap

5
推荐指数
1
解决办法
1321
查看次数

在 SSD 上使用交换文件/分区的缺点,即使 swappiness 设置为 0

在 SSD 上使用交换文件/分区的缺点是什么,即使将 swappiness 设置为 0

我对 /proc/sys/vm/swappiness=0 的情况特别感兴趣。在实践中,对该交换文件仍有多少写入,它是否对 SSD 产生负面影响或任何其他缺点?或者它几乎可以与没有交换文件相比?

我很清楚 swappiness=0 是什么意思,只是不知道它在实践中的含义。

我的问题源于我在没有交换的情况下遇到的问题:https : //stackoverflow.com/questions/4567972/error-executing-aapt-all-of-the-sudden。有关于 SSD 和交换的类似问题,但它们没有深入研究 swappiness=0:没有交换分区的缺点我应该将交换文件保存在 SSD 驱动器上吗?

ssd swap swappiness

5
推荐指数
1
解决办法
1829
查看次数

从挂起到磁盘恢复后,锁定的页面是否会从磁盘粉碎?

锁定页面有时用于存储加密密钥,例如 Luks 或 encfs 和其他敏感事物。

但是在进行休眠(没有交换驱动器加密)时,它们无论如何都会未加密地存储到磁盘中。

当系统从休眠状态恢复时,锁定的页面是否会从交换文件中删除,或者我应该以某种方式手动清理交换驱动器?

linux security hibernate swap

5
推荐指数
1
解决办法
108
查看次数

我怎样才能让 Linux 不颠簸而只是杀死进程?

Firefox(和闪存)往往会随机占用内存,导致我的计算机出现抖动,这让我发疯地等待 oom_killer 启动并杀死进程,[1] 而我自己却无能为力. 我已经禁用了交换,但这只会让事情变得更糟。它在杀死任何东西之前会挣扎数小时,这毫无意义。为什么它不只是刷新一大块缓存并继续运行?

我可以禁用缓存吗?我可以让它停止颠簸吗?我只是想让最大的内存猪在我内存不足时死去。

[1] 没关系,它实际上并不针对 Firefox,而是继续杀死 X 或我的桌面环境。

memory linux kill cache swap

5
推荐指数
1
解决办法
2740
查看次数

控制 tmpfs 内存使用

有什么方法可以限制 tmpfs 使用的 RAM 量而不限制交换量?

大多数文档都说 tmpfs 的size选项将限制 tmpfs分区的总大小,稍后会说这个空间由 RAM 和 SWAP 使用。然后说默认是你内存的一半,因为如果它用完所有的内存,你会得到 OOM 致命错误。这很混乱。

例如,我希望使用 1/4 的内存但最多使用 3/4 的交换。

memory linux swap tmpfs

5
推荐指数
1
解决办法
6431
查看次数

当您尝试休眠但没有足够的可用交换时会发生什么?

我有一个带有大小 RAM + x交换分区的 Linux 机器。假设超过x的交换已在使用中。现在我尝试休眠。请问内核

  • 随机终止睡眠和/或不睡眠进程,直到有足够的交换空间来容纳 RAM
  • 不休眠并警告/要求继续?

或者这种情况永远不会发生,因为内核总是保留足够的交换空间来安全休眠?

我可以配置行为吗?

编辑:如果这有所作为,我目前使用 Ubuntu 12.04 和 Linux 3.2.0-39-generic 和休眠与pm-hibernate.

memory linux hibernate swap

5
推荐指数
1
解决办法
1967
查看次数

标签 统计

swap ×10

linux ×8

memory ×5

hibernate ×2

cache ×1

freeze ×1

kill ×1

pagefile ×1

security ×1

ssd ×1

swappiness ×1

tmpfs ×1

top ×1

virtual-memory ×1

windows-7 ×1