linux panic 参数,Linux之系统参数panic_on_oom

本文介绍了Linux系统中与内存管理相关的几个关键参数,包括panic_on_oom、oom_kill_allocating_task和oom_dump_tasks,以及oom_adj、oom_score_adj和oom_score。这些参数在内存不足时决定如何处理,如是否触发系统重启,选择哪个进程进行杀掉,以及如何记录和评估进程的内存使用情况。通过调整这些参数,DBA可以更好地监控和控制系统的内存资源分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

作为DBA,内存的使用情况是重要的监控指标之一,了解内存使用很重要。下面有一个系统参数,对于内存的调用起到重要的作用。大家可以了解一下。

参数:panic_on_oom: 用来控制当内存不足时该如何做。

cat /proc/sys/vm/panic_on_oom

值为0:内存不足时,启动 OOM killer。

值为1:内存不足时,有可能会触发 kernel panic(系统重启),也有可能启动 OOM killer。

值为2:内存不足时,表示强制触发 kernel panic,内核崩溃GG(系统重启)。

参数:oom_kill_allocating_task: 用来决定触发OOM时先杀掉哪种进程

cat /proc/sys/vm/oom_kill_allocating_task

值为0:会 kill 掉得分最高的进程。

值为非0:会kill 掉当前申请内存而触发OOM的进程。

当然,一些系统进程(如init)或者被用户设置了oom_score_adj的进程等可不是说杀就杀的。

参数:oom_dump_tasks:用来记录触发OOM时记录哪些日志

cat /proc/sys/vm/oom_dump_tasks

oom_dump_tasks参数可以记录进程标识信息、该进程使用的虚拟内存总量、物理内存、进程的页表信息等。

值为0:关闭打印上述日志。在大型系统中,可能存在上千进程,逐一打印使用内存信息可能会造成性能问题。

值为非0:有三种情况会打印进程内存使用情况。

1、由 OOM 导致 kernel panic 时;

2、没有找到符合条件的进程 kill 时;

3、找到符合条件的进程并 kill 时。

参数:oom_adj、oom_score_adj 和 oom_score:用来控制进程打分(分数越高,就先杀谁)

这三个参数的关联性比较紧密,都和具体的进程相关,位置都是在 /proc/进程PID/ 目录下。

内核会对进程打分(oom_score),主要包括两部分,系统打分和用户打分。系统打分就是根据进程的物理内存消耗量;用户打分就是 oom_score_adj 的值。如果用户指定 oom_score_adj 的值为 -1000,也就是表示禁止 OOM killer 杀死该进程。

用户可以通过调整 oom_score_adj 的值来决定最终 oom_score 的值,oom_score_adj 的取值范围是 -1000~1000,为0时表示用户不调整 oom_score。另外,root进程拥有3%的内存使用特权,因此做最终 oom_score 计算时需要减去这些内存使用量。

oom_adj是一个旧的接口参数,其功能类似oom_score_adj,为了兼容,目前仍然保留这个参数,当操作这个参数的时候,kernel实际上是会换算成oom_score_adj。

参数修改方法:

前三个参数修改方式如下:

vim /etc/sysctl.conf 添加如下:

vm.panic_on_oom = 1

sysctl -p

或重启操作系统

后三个参数修改方式如下:

echo 20 > /proc/进程id/oom_score_adj

<think>嗯,我现在需要解释一下 vm.panic_on_oom = 0 这个参数。首先,我应该先弄清楚这个参数是干什么用的。OOM应该是Out-of-Memory,也就是内存不足的情况。panic_on_oom可能是在内存不足时系统是否会触发panic,也就是让内核崩溃。那这个参数设为0的话,应该就是不触发panic,而是让系统尝试处理这种情况。 接下来,我需要确认这个参数的具体作用。Linux系统在遇到内存耗尽的时候,OOM killer会被调用来终止一些进程,释放内存。如果panic_on_oom设置为0,可能意味着系统不会因为OOM而直接崩溃,而是让OOM killer工作。反之,如果设置为1,可能就会直接panic。 然后,我需要考虑这个参数的位置。vm.panic_on_oom属于sysctl的设置,用户可以通过/proc/sys/vm/panic_on_oom来查看或修改。可能还有其他相关的参数,比如overcommit_memory或者oom_kill_allocating_task,这些可能和OOM处理策略有关联。 另外,需要说明默认值是多少。一般来说,很多Linux发行版默认的panic_on_oom是0,也就是不触发panic,这可能更符合大多数服务器的需求,因为直接崩溃可能影响服务可用性。但在某些高可用性环境中,可能希望系统在无法处理时快速重启,这时候可能会设置成1。 还要注意,可能有两种情况下的OOM,一种是全局的,整个系统内存耗尽;另一种是针对某个cgroup或者命名空间的。panic_on_oom可能影响这两种情况,或者可能有不同的参数控制。比如,可能有另一个参数控制是否在cgroup级别的OOMpanic,这时候需要确认。 另外,需要解释这个参数的意义和应用场景。例如,当系统作为服务器运行时,保持稳定更重要,所以设为0允许OOM killer终止进程;而某些嵌入式系统或特殊环境,可能需要立即panic以便触发故障转移机制。 可能还要提到如何临时修改和永久修改这个参数。临时修改可以使用sysctl命令或者直接写/proc文件系统,永久修改则需要编辑/etc/sysctl.conf文件。 需要检查是否有错误,比如参数的正确路径,默认值是否正确,以及和其他参数的关系。例如,当overcommit_memory设置为2时,系统的内存分配策略更严格,可能导致更早触发OOM,这时候panic_on_oom的设置就更关键。 总结一下,回答的结构应该包括参数的作用,默认值,如何配置,应用场景,以及相关注意事项。确保用中文解释清楚,并且符合用户的需求,特别是系统管理员或者开发人员需要调整内核参数时的参考。</think>当你在Linux系统中看到`vm.panic_on_oom = 0`时,这表示系统在遇到**内存耗尽(Out-of-Memory, OOM)**时的行为配置。以下是逐步解释: --- ### 1. **参数的作用** - **`vm.panic_on_oom`** 控制当系统内存不足时,是否触发**内核崩溃(panic)**。 - **默认值**为 `0`,表示: - 当OOM发生时,内核会尝试通过**终止进程**(调用OOM Killer)来释放内存,而不会直接崩溃系统。 - 这是为了保证系统的可用性,即使某些进程被牺牲。 --- ### 2. **参数的可能取值** - **`0`**(默认):不触发panic,尝试通过OOM Killer恢复。 - **`1`**:触发panic,直接让内核崩溃(需结合其他参数使用,例如`panic`和`panic_timeout`)。 - **`2`**(特殊场景):即使OOM发生在cgroup或容器中,也会触发系统panic。 --- ### 3. **如何查看和修改** - **查看当前值**: ```bash cat /proc/sys/vm/panic_on_oom ``` - **临时修改**(重启失效): ```bash sysctl -w vm.panic_on_oom=1 # 设为1,触发panic ``` - **永久修改**: 在`/etc/sysctl.conf`中添加: ```bash vm.panic_on_oom = 1 ``` 然后执行 `sysctl -p` 生效。 --- ### 4. **典型应用场景** - **生产服务器**:建议保持默认值 `0`,避免因内存不足导致系统崩溃。 - **调试环境**:设为 `1`,可强制系统OOM时崩溃,方便捕获内存问题的核心转储(core dump)。 --- ### 5. **注意事项** - **与OOM Killer的关系**: - 当`vm.panic_on_oom=0`时,OOM Killer会基于进程的`oom_score`选择并终止进程。 - 可通过调整进程的`oom_score_adj`(在`/proc/[pid]/oom_score_adj`中)控制进程的终止优先级。 - **与`overcommit_memory`的关联**: - 若`vm.overcommit_memory=2`(严格内存分配策略),可能更早触发OOM。 - 此时`vm.panic_on_oom`的设置对系统稳定性影响更大。 --- ### 6. **总结** - **`vm.panic_on_oom=0`** 是Linux系统内存管理的安全机制,旨在通过终止进程而非崩溃系统来维持整体可用性。 - 修改此参数需谨慎,仅在明确需求(如调试内核问题)时设为 `1`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值