Linux 常用内核参数说明
sysctl
命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录 /proc/sys
中。
sysctl
命令对内核参数的修改仅在当前生效,重启系统后参数丢失。如果希望参数永久生效可以修改配置文件 /etc/sysctl.conf
。
常用内核参数说明
内核参数 | 取值范围 | 含义 | 使用说明 |
---|---|---|---|
kernel.hung_task_timeout_secs = 120 |
int | 设置系统检测到进程阻塞(如 `D` 状态)后,等待进程结束的时常。 如果进程未在规定时间内结束,系统认为该进程无响应,则自动杀死以避免系统奔溃 |
mem
内核参数 | 取值范围 | 含义 | 使用说明 |
---|---|---|---|
vm.min_free_kbytes = 2097152 |
单位 KB |
设置系统最小剩余内存,以避免缓存不释放导致的死机 | |
vm.oom-kill = 0 |
0,1 默认值为 1,开启 |
是否启用 OOM-killer。 特定情况下,可能不希望核心执行 OOM killer 的工作,关闭 OOM killer。 例如,排错时 echo 0 > /proc/sys/vm/oom-kill 临时关闭 [1] |
|
vm.overcommit_memory = 0 |
0,1,2 | 内存分配策略/proc/sys/vm/overcommit_memory |
vm.overcommit_memory 详细说明 |
vm.overcommit_ratio = 50 |
int default = 50 |
vm.overcommit_memory = 2 时才生效,配置允许 overcommit 的百分比 |
vm.overcommit_memory 详细说明 |
vm.panic_on_oom = 0 |
0,1 默认为 0 ,开启 |
表示当内存耗尽时,内核会触发 OOM killer 杀掉最耗内存的进程 | |
vm.oom_kill_allocating_task = 0 |
0,1 默认为 0 ,不启用 |
OOM-Killer 时,是否选择当前正在申请内存的进程进行 kill |
vm.overcommit_memory
Linux 对大部分申请内存的请求都回复 yes
,以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做 Overcommit
。当 Linux 发现内存不足时,会发生 OOM killer(OOM=out-of-memory)
。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。
当 oom-killer
发生时,Linux 会选择杀死哪些进程?选择进程的函数是 oom_badness
函数(在 mm/oom_kill.c
中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟 oom_score_adj
有关,而且 oom_score_adj
可以被设置(-1000最低,1000最高)。
overcommit
内存分配策略,可选值:0、1、2
0
- 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1
- 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2
- 表示内核允许分配超过所有物理内存和交换空间总和的内存当系统分配的内存超过
swap+N%*物理RAM
(N%由vm.overcommit_ratio
决定)时,会拒绝 commit