尽管我们将近一半的内存用于 FS 缓存,但我们还是遇到了 OOM 杀手。我们每分钟记录一次内存统计信息(如 top 所报告的),但似乎有很多可用性。
...
Mem: 15339640k total, 15268304k used, 71336k free, 3152k buffers
Swap: 0k total, 0k used, 0k free, 6608384k cached
Mem: 15339640k total, 14855280k used, 484360k free, 13748k buffers
Swap: 0k total, 0k used, 0k free, 6481852k cached
[OOM killer: postgres killed]
Mem: 15339640k total, 8212200k used, 7127440k free, 32776k buffers
Swap: 0k total, 0k used, 0k free, 2394444k cached
...
Run Code Online (Sandbox Code Playgroud)
来自系统日志的 OOM 详细信息:
...
Jun 10 05:45:25 db kernel: [11209156.840462] wal-e invoked oom-killer: …Run Code Online (Sandbox Code Playgroud) 我有一个旧的遗留服务器,交换有一个奇怪的问题。
我知道交换分区很小,要添加一个交换文件,但是,在重新启动后几个小时后,情况是这样的:
free -m
total used free shared buffers cached
Mem: 15922 15806 116 0 313 13345
-/+ buffers/cache: 2147 13775
Swap: 2047 2042 4
Run Code Online (Sandbox Code Playgroud)
Oracle 数据库已安装,但几乎未使用。我想了解为什么内存分配会这样。我的意思是 13345 缓存,意味着免费。为什么要填充交换?
以前的系统管理员将 swappiness 配置为:3。
未配置
大页面。
我看到一些类似的帖子,但没有解决方案来理解。这里的答案:linux redhat 5.4 - 内存仍然可用时交换谈到numa,所以我挖掘了一下(我是dba,不是系统管理员,如果我错过了什么,很抱歉)。
grep NUMA=y /boot/config-`uname -r`
CONFIG_NUMA=y
CONFIG_K8_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_ACPI_NUMA=y
dmesg | grep -i numa
NUMA: Using 63 for the hash …Run Code Online (Sandbox Code Playgroud)