热点
数据洪流实时掘金:分布式事务智能处理引领行业革新,reasoning_content:我们要求以分布式事务专家的口吻,写一个与“技术、科技”相关,关于[数据洪流实时掘金:智能处理引领行业革新]的标题直接输出一个标题,不要加说明字数30字以内需要简短精炼,体现分布式事务专家的口吻,同时紧扣数据洪流、实时掘金、智能处理、行业革新nn可能的数据洪流实时掘金:分布式事务智能处理引领革新但字数可能略多或者:实时掘金数据洪流:分布式事务智能革新或者更专家口吻:分布式事务专家:实时数据洪流智能掘金但要求直接输出标题,不需要署名nn简洁版:数据洪流实时掘金:智能处理引领行业革新正好11个字?不对,标题原样是数据洪流实时掘金:智能处理引领行业革新,字数14个字?数一下:数据洪流实时掘金(6)+冒号+智能处理引领行业革新(8)=14个字,符合30字内但需要以分布式事务专家的口吻,可能加一些专业术语例如:分布式事务下的数据洪流实时掘金与智能处理革新或者:实时掘金:分布式事务智能处理引领数据洪流革新nn更合适:分布式事务专家视角:数据洪流实时掘金,智能处理革新行业但字数略多nn最佳:数据洪流实时掘金:分布式事务智能处理引领革新字数:数据洪流实时掘金(7? 数据(2)洪流(2)实时(2)掘金(2)=8? 不对,汉字每个字算一个,数据洪流实时掘金:6个字+冒号+分布式事务智能处理引领革新:11个字,共17个字符合nn或者更短:实时掘金数据洪流:分布式事务智能革新共11个字nn考虑到要体现“专家”口吻,可以加“专家谈”之类的,但可能超过30字直接一个标题,不用加“专家”二字,但内容体现分布式事务即可我选择:数据洪流实时掘金:分布式事务智能处理引领行业革新这个标题直接包含了原题中的元素,并且加入了“分布式事务”体现专家口吻字数:数据洪流实时掘金(6)+冒号+分布式事务智能处理引领行业革新(13)=19个字,符合输出这个
系统维护员:运营中心模块化设计与动态配置优化,reasoning_content:我们要求以系统维护员的口吻,写一个与技术、科技相关,关于[运营中心产品升级:模块化设计与动态配置策略优化]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn思考:需要体现系统维护员的身份,同时围绕模块化设计和动态配置策略优化可以包含“系统维护员”这个词,或者用第一人称口吻例如:“系统维护员视角:模块化设计助力动态配置优化”但字数可能超?计算一下:系统维护员视角:模块化设计助力动态配置优化(共18字,符合)或者更简洁:“维护员手记:模块化+动态配置升级”也可以考虑“系统维护员解读:运营中心产品升级新策略”但要求是标题,要直接nn更贴合“口吻”的,比如“系统维护员:模块化设计与动态配置策略优化实践”,但字数可能超?数一下:系统维护员:模块化设计与动态配置策略优化实践(共20字,符合)但可以更精炼nn考虑用“系统维护员谈:模块化与动态配置优化”,但少了运营中心产品升级原文有“[运营中心产品升级:模块化设计与动态配置策略优化]”,需要体现这个主题nn最终选一个:系统维护员:运营中心产品升级之模块化与动态配置优化(共22字)或者“系统维护员看产品升级:模块化设计+动态配置策略优化”(22字)更好的是:“系统维护员解读:模块化设计驱动动态配置优化”(17字,但少了运营中心)可以加“运营中心”三字:“系统维护员解读运营中心:模块化与动态配置优化”(18字)或者“运营中心升级:系统维护员谈模块化与动态配置策略”(20字)nn鉴于要求“以’系统维护员’的口吻”,最好标题开头就是“系统维护员”之类的同时简洁考虑:系统维护员:模块化设计与动态配置策略优化(17字,但缺少运营中心)可改为“系统维护员:运营中心模块化与动态配置升级”(17字)再改“系统维护员:运营中心产品升级策略优化”(15字,但没提模块化和动态配置)需要包含这两个关键词nn最终确定:系统维护员:模块化设计+动态配置策略优化(16字,但没体现运营中心)或者“运营中心升级:系统维护员谈模块化与动态配置”(18字)这个可以nn我觉得直接输出:“系统维护员:运营中心模块化设计与动态配置优化” 共19字好
17 9 月 2026, 周四

还在担心服务器进程被OOM?只需一招,即可避免

问题描述

Linux 内核有个机制叫 OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。

还在担心服务器进程被OOM?只需一招,即可避免

典型的情况是:某天一台机器突然 ssh 远程登录不了,但能 ping 通,说明不是网络的故障,原因是 sshd 进程被 OOM killer 杀掉了(多次遇到这样的假死状况)。重启机器后查看系统日志「/var/log/messages」会发现「Out of Memory: Kill process 1865(sshd)」类似的错误信息。

如何防止重要的系统进程触发(OOM)机制而被杀死呢?只需要一招,就可以轻松避免。

还在担心服务器进程被OOM?只需一招,即可避免

设置参数「/proc/PID/oom_adj为-17」,可临时关闭 Linux 内核的 OOM 机制。内核会通过特定的算法给每个进程计算一个分数来决定杀哪个进程,每个进程的 OOM 分数可以在「/proc/PID/oom_score」中找到。

处理办法

1. 方法一:设置参数/proc/PID/oom_adj为-17

如何防止mongod被杀,可以这样操作:

(1) 编写脚本文件oomadj.sh,内容如下:

  1. #!/bin/bash 
  2. netstat -ntlup |grep mongod |awk '{print$NF}' |awk -F '/' '{print$(NF-1)}' |while read PID; 
  3. do 
  4. echo -17 >/proc/$PID/oom_adj; 
  5. done 

(2) 设置定时计划

  1. [root@mnkj-mongodb-01 ~]crontab -e 
  2. */1 * * * * /root/oomadj.sh 

还在担心服务器进程被OOM?只需一招,即可避免

至于为什么用-17而不用其他数值(默认值为0),这个是由linux内核定义的,查看内核源码可知:

以 linux-3.3.6 版本的 kernel 源码为例,路径为「linux-3.6.6/include/linux/oom.h」,阅读内核源码可「oom_adj」的可调值为 15 到 -16,其中 15 最大-16 最小,-17 为禁止使用OOM。「oom_score」为 2 的 N 次方计算出来的,其中 N 就是进程的「oom_adj」值,所以「oom_score」的分数越高就越会被内核优先杀掉。

2. 方法二:修改内核参数禁止OOM机制

  1. # sysctl -w vm.panic_on_oom=1 
  2. vm.panic_on_oom = 1 //1表示关闭,默认为0表示开启OOM 
  3. # sysctl -p 

注意事项

注意:

  • Kernel-2.6.26之前版本的 oomkiller 算法不够精确,RHEL 6.x 版本的 2.6.32 可以解决这个问题。
  • 子进程会继承父进程的 oom_adj。
  • OOM 不适合于解决内存泄漏(Memory leak)的问题。
  • 有时 free 查看还有充足的内存,但还是会触发 OOM,是因为该进程可能占用了特殊的内存地址空间。

OOM killer 是保证系统内存不被个别进程消耗殆尽非常实用的机制,但是在实际工作除了进程运行过多会造成内存占用过高,还有很多其他的因素比如:访问增多、遭受攻击等…

这时我们不仅要使用好 OOM killer,更需要关注服务器的资源使用情况,需要完善的实时监控体系,能够对于系统存在问题能够及时的发现并处理,保证业务稳定运行。

dawei

【声明】:天津站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。