Linux OOM 自动杀死进程

问题描述:

今天上班后,登录一台内网测试服务器,发现部分进程失踪 (Nginx/PHP-FPM/MySQL/Crond)。

解决方法:

1、首先启动这些进程,保证正常提供服务。

2、查看服务器日志信息,排除故障。

shell > less /var/log/messages-20160905Sep  3 05:31:10 localdomain kernel: Out of memory: Kill process 3145 (mysqld) score 33 or sacrifice child
Sep  3 05:31:10 localdomain kernel: Killed process 3145, UID 804, (mysqld) total-vm:9170936kB, anon-rss:246880kB, file-rss:32kBSep  3 05:40:41 localdomain kernel: Out of memory: Kill process 20889 (nginx) score 2 or sacrifice child
Sep  3 05:40:41 localdomain kernel: Killed process 20889, UID 803, (nginx) total-vm:130256kB, anon-rss:216kB, file-rss:12kB

3、发现类似的日志信息,上网查资料。

4、资料显示,这是由于系统内存不足导致触发 Linux Kernel OOM(Out of memory killer)保护机制,将占用内存大的进程杀死,以保证系统正常运行。

Sep  3 05:37:10 localdomain kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Sep  3 05:37:10 localdomain kernel: mysqld cpuset=/ mems_allowed=0-1Sep  3 05:39:30 localdomain kernel: crond invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0
Sep  3 05:40:26 localdomain kernel: crond cpuset=/ mems_allowed=0-1Sep  3 05:40:36 localdomain kernel: php invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Sep  3 05:40:37 localdomain kernel: php cpuset=/ mems_allowed=0-1

5、还发现一种情况,内存够用,但还是触发了 OOM 杀死进程。这里涉及到一个 Low Memory 的知识点。内核使用 Low Memory 来跟踪所有的内存分配。

注意:只有在 32 位操作系统中才区分 Low Memory 与 High Memory ,64 位系统中 Low Memory 就是所有内存空间。

shell > free -lmtotal       used       free     shared    buffers     cached
Mem:         11901       1039      10861          0         47        133
Low:         11901       1039      10861
High:            0          0          0
-/+ buffers/cache:        858      11042
Swap:         8191          2       8189

# 可以看到:Low 大小跟总内存一样大,High 都为 0 。

6、那该怎么办?

> 增加内存、使用 64 位操作系统。

> 合理配置内存空间,例如 PHP 加速器的缓存空间等,定期重启 PHP-FPM 进程。

> 手动释放内存:sync; echo 3 > /proc/sys/vm/drop_caches

> 使用 hugemem 内核,该内核以不同的方式分割 low/high memory ,而且多数情况下会提供足够多的 low memory 到 high memory 的映射。
  安装 hugemem kernel rpm 包,重启服务器即可。
  
> 指定不杀死某进程:echo -17 > /proc/$(pidof mysqld)/oom_adj  # -17 为对该进程禁止使用 OOM

> echo "vm.panic_on_oom = 1" >> /etc/sysctl.conf; sysctl -p   # 关闭 OOM ( 后两三种慎用吧 )

sync; echo 3 > /proc/sys/vm/drop_caches

来源:https://blog.csdn.net/zwjyyy1203/article/details/80277920

Linux OOM 自动杀死进程(转)相关推荐

  1. linux下杀死全部进程,linux下批量杀死进程

    ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符 ...

  2. linux killall 源代码,Linux基础命令---杀死进程killall

    killall killall可以根据名字来杀死进程,它会给指定名字的所有进程发送信息.如果没有指定信号名,则发送SIGTERM.信号可以通过名称(例如-HUP或-SIGHUP)或数字(例如-1)或选 ...

  3. Linux查看并杀死进程

    Linux查看并杀死进程 查看进程 方法一 lsof -i:80 -i<条件>:列出符合条件的进程(协议.:端口. @ip ) 方法二 netstat -anp | grep 进程ID - ...

  4. kill -9 进程号杀不死可以用下面的杀掉 Linux下强制杀死进程的方法详解

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ...

  5. linux下强制杀死进程和解压缩命令

    ps -ef|grep firefox/webstorm linux下强制杀死进程 linux下压缩和解压命令 tar 解包:tar zxvf filename.tar 打包:tar czvf fil ...

  6. linux杀死网络,Linux下kill杀死进程详解

    背景:这个Linux下kill命令总是记不住,在此稍作记录,方便查看! 1 杀死进程 1.1 查看进程 此时如果我想杀了火狐的进程就在终端输入: $ kill -s 9 1827 其中-s 9 制定了 ...

  7. 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程

     场景:实现安装一个apk应用程序的过程.界面如下: 编写如下应用,应用结构如下: <RelativeLayout xmlns:android="http://schemas.an ...

  8. linux安全杀死命令,Linux操作系统下杀死进程命令的方法

    1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID 举例: [root@localhost ~]# ps auxf |grep httpd root 4939 0.0 ...

  9. Linux下强制杀死进程的方法

    https://www.cnblogs.com/liaojie970/p/7131043.html 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx 1822 1 0 11: ...

最新文章

  1. tensorrt轻松部署高性能dnn推理_NVIDIA Triton推理服务器助力深度学习推理
  2. UML中的用例(Use Case)概念分析及实例
  3. 关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决
  4. VC小技巧(三)视图
  5. HarmonyOS之HiTrace日志跟踪定位分析
  6. MVC中提交表单的4种方式
  7. 12种Javascript解决常见浏览器兼容问题的方法
  8. java运行出现XML_eclipse开发环境下,项目运行时出现pom.xml报错(java.io.PrintWriter)...
  9. 什么是全兼容?DVD主流格式全面解析
  10. shell @ Linux (1)
  11. BosonNLP情感词典 评论情感分析
  12. 《运算放大器权威指南(Op Amps for Everyone)》读书笔记(一)
  13. FFmpeg+SDL纯视频播放器
  14. VUE中的img的:src动态加载图片的问题,require也不能随便用
  15. 使用css3和tween.js二种方式实现照片翻转
  16. Java 9 - 说说响应式流
  17. CTS测试时手机的设置
  18. 手机录制的视频不能导入AE解决办法,86::1,先导入PR
  19. Github+Hexo搭建个人博客(图文详解)
  20. matlab基础与应用——常用命令整理

热门文章

  1. mysql 事务权限_0428-mysql(事务、权限)
  2. 广州的11个辖区_避开人潮,广州7月展览指南,有11个免费
  3. 3、常用关键字,变量赋值,多个变量赋值,标准数据类型,数字,字符串,列表,元组,字典,数据类型转换
  4. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证
  5. 数据类型,隐式类型转换
  6. c语言中常见错误总结
  7. redhat下安装apache-tomcat-7.0.47.tar.gz
  8. Rotation Rose各部分的名称
  9. Mysql数据目录初识
  10. bat怎么获取前一天 的日期_bat脚本 得到前一天的日期