相关疑难解决方法(0)

2-4GB 系统上有多少 SWAP 空间?

我应该如何决定在具有 2-4 GB RAM 的新 Linux 机器 (Debian) 上进行交换的大小?我真的需要交换空间吗?

linux debian swap

53
推荐指数
4
解决办法
4万
查看次数

如何让 Linux OOM 杀手不杀死我的进程?

当物理内存不足但有足够的交换空间时,如何让 Linux OOM 杀手不杀死我的进程?

我使用 sysctl vm.overcommit_memory=2 禁用了 OOM 杀戮和过度使用。

VM 有 3 GB 的完全免费的未碎片交换空间,被 OOM 杀死的进程的最大内存使用量小于 200MB。

我知道长期交换对性能来说会很糟糕,但是我现在需要使用交换来在内存要求更高的 valgrind 下进行功能测试。

Mar  7 02:43:11 myhost kernel: memcheck-amd64- invoked oom-killer: gfp_mask=0x24002c2, order=0, oom_score_adj=0
Mar  7 02:43:11 myhost kernel: memcheck-amd64- cpuset=/ mems_allowed=0
Mar  7 02:43:11 myhost kernel: CPU: 0 PID: 3841 Comm: memcheck-amd64- Not tainted 4.4.0-x86_64-linode63 #2
Mar  7 02:43:11 myhost kernel: Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014
Mar  7 02:43:11 myhost kernel: 0000000000000000 …
Run Code Online (Sandbox Code Playgroud)

linux swap oom

28
推荐指数
4
解决办法
3万
查看次数

即使有足够的可用内存,Linux 进程也会被杀死

我正在调查为什么我们的两个进程被 Linux OOM 杀手杀死 - 尽管似乎有足够的 RAM 和大量可用的 SWAP。

当我通过这个答案解释它时,第一个内存请求要求 2^2=4 页(16KB)的内存(顺序标志)并希望它来自“正常”区域。

Jan 27 04:26:14 kernel: [639964.652706] java invoked oom-killer: gfp_mask=0x26000c0, order=2, oom_score_adj=0
Run Code Online (Sandbox Code Playgroud)

如果我正确解析输出,就会有足够的空间:

Node 0 Normal free:178144kB min:55068kB low:68832kB high:82600kB 
Run Code Online (Sandbox Code Playgroud)

几分钟后第二次有同样的请求——而且似乎也有足够的可用空间。

为什么当时触发了OOM杀手?我解析的信息有误吗?

  • 系统是 14.04 Ubuntu,带有 4.4.0-59 x64 内核
  • vm.overcommit_memory设置设置为“0”(启发式),这可能不是最佳的。

实例一:

Jan 27 04:26:14 kernel: [639964.652706] java invoked oom-killer: gfp_mask=0x26000c0, order=2, oom_score_adj=0
Jan 27 04:26:14 kernel: [639964.652711] java cpuset=/ mems_allowed=0
Jan 27 04:26:14 kernel: [639964.652716] CPU: 5 PID: 2152 Comm: java Not tainted 4.4.0-59-generic …
Run Code Online (Sandbox Code Playgroud)

linux oom

9
推荐指数
1
解决办法
6726
查看次数

标签 统计

linux ×3

oom ×2

swap ×2

debian ×1