我在关闭交换时遇到了一个奇怪的问题。服务器有 192 GB 内存,154 GB 可用内存。
它是一个运行多个 Linux KVM 虚拟机的管理程序。
当尝试:
# swapoff -a
swapoff: /dev/sda2: swapoff failed: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)
但内存是免费的:
# cat /proc/meminfo
MemTotal: 197805748 kB
MemFree: 162274264 kB
MemAvailable: 162388912 kB
Buffers: 432 kB
Cached: 353524 kB
SwapCached: 221828 kB
Active: 28253440 kB
Inactive: 5349056 kB
Active(anon): 28159204 kB
Inactive(anon): 5289320 kB
Active(file): 94236 kB
Inactive(file): 59736 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 124999676 kB
SwapFree: 124534724 kB
Dirty: 796 kB
Writeback: 0 kB
AnonPages: …
Run Code Online (Sandbox Code Playgroud) 我已通过设置禁用内存过度使用overcommit_memory=2
。现在,当我尝试时swapoff
,出现此错误:
swapoff:/dev/sda5:swapoff 失败:无法分配内存
但我实际上有0 MiB
交换和大量可用内存!我尝试设置overcommit_ratio
为 100,但它没有改变任何东西。
如果我暂时overcommit_memory=0
按默认设置,我可以成功swapoff
,然后重新禁用过度提交。
为什么会有这种奇怪的行为?这是一个错误吗?
按照评论中的要求进行编辑:
$ grep -E '^Mem|Commit' /proc/meminfo
MemTotal: 2044420 kB
MemFree: 751836 kB
CommitLimit: 4122112 kB
Committed_AS: 2752544 kB
Run Code Online (Sandbox Code Playgroud)