我有持续的 oom&panic 情况未解决。我不确定系统是否填满了所有内存(36GB)。为什么这个系统会触发这种oom情况?我怀疑它与 32 位 linux 系统中的 lowmem 区域有关。如何分析内核恐慌和 oom-killer 的日志?
此致,
内核 3.10.24
Dec 27 09:19:05 2013 kernel: : [277622.359064] squid invoked oom-killer: gfp_mask=0x42d0, order=3, oom_score_adj=0
Dec 27 09:19:05 2013 kernel: : [277622.359069] squid cpuset=/ mems_allowed=0
Dec 27 09:19:05 2013 kernel: : [277622.359074] CPU: 9 PID: 15533 Comm: squid Not tainted 3.10.24-1.lsg #1
Dec 27 09:19:05 2013 kernel: : [277622.359076] Hardware name: Intel Thurley/Greencity, BIOS 080016 10/05/2011
Dec 27 09:19:05 2013 kernel: : [277622.359078] 00000003 e377b280 e03c3c38 c06472d6 e03c3c98 …Run Code Online (Sandbox Code Playgroud) 我正在运行一个没有交换的 Linux 工作站,并且我已经安装了earlyoom守护进程,以便在 RAM 不足时自动终止一些进程。它earlyoom通过监视内核MemAvailable值来工作,如果可用内存变得足够低,它会杀死不太重要的进程。
这已经工作了很长一段时间,但突然间我遇到了MemAvailable与系统其他部分相比突然非常低的情况。例如:
$ grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached):' /proc/meminfo
MemTotal: 32362500 kB
MemFree: 5983300 kB
MemAvailable: 2141000 kB
Buffers: 665208 kB
Cached: 4228632 kB
Run Code Online (Sandbox Code Playgroud)
请注意 MemAvailable 远低于MemFree+ Buffers+ Cached。
我可以运行任何工具来进一步调查为什么会发生这种情况吗?我觉得系统性能比正常情况要差一些,我不得不停止该服务,因为除非稳定(即它正确地描述了用户模式进程的可用内存),earlyoom否则它的逻辑将无法工作。MemAvailable
根据https://superuser.com/a/980821/100154 MemAvailable 是对可用于启动新应用程序(无需交换)的内存量的估计。由于我没有交换,这是什么意思?这是否意味着在触发 OOM Killer 之前新进程可以获取的内存量(因为这在逻辑上会遇到“交换已满”的情况)?
我曾假设MemAvailable>=MemFree总是正确的。不在这里。
附加信息:
在互联网上搜索表明,原因可能是打开的文件不受文件系统支持,因此无法从内存中释放。该命令sudo lsof | wc -l输出653100所以我绝对无法手动浏览该列表。
顶部sudo slabtop说
Active / Total Objects (% used) …Run Code Online (Sandbox Code Playgroud)