Linux OOM 自动杀死进程
问题描述:
今天上班后,登录一台内网测试服务器,发现部分进程失踪 (Nginx/PHP-FPM/MySQL/Crond)。
解决方法:
1、首先启动这些进程,保证正常提供服务。
2、查看服务器日志信息,排除故障。
shell > less /var/log/messages- Sep :: localdomain kernel: Out of memory: Kill process (mysqld) score or sacrifice child
Sep :: localdomain kernel: Killed process , UID , (mysqld) total-vm:9170936kB, anon-rss:246880kB, file-rss:32kB Sep :: localdomain kernel: Out of memory: Kill process (nginx) score or sacrifice child
Sep :: localdomain kernel: Killed process , UID , (nginx) total-vm:130256kB, anon-rss:216kB, file-rss:12kB
3、发现类似的日志信息,上网查资料。
4、资料显示,这是由于系统内存不足导致触发 Linux Kernel OOM(Out of memory killer)保护机制,将占用内存大的进程杀死,以保证系统正常运行。
Sep :: localdomain kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=, oom_adj=, oom_score_adj=
Sep :: localdomain kernel: mysqld cpuset=/ mems_allowed=- Sep :: localdomain kernel: crond invoked oom-killer: gfp_mask=0x84d0, order=, oom_adj=, oom_score_adj=
Sep :: localdomain kernel: crond cpuset=/ mems_allowed=- Sep :: localdomain kernel: php invoked oom-killer: gfp_mask=0x201da, order=, oom_adj=, oom_score_adj=
Sep :: localdomain kernel: php cpuset=/ mems_allowed=-
5、还发现一种情况,内存够用,但还是触发了 OOM 杀死进程。这里涉及到一个 Low Memory 的知识点。内核使用 Low Memory 来跟踪所有的内存分配。
注意:只有在 32 位操作系统中才区分 Low Memory 与 High Memory ,64 位系统中 Low Memory 就是所有内存空间。
shell > free -lm
total used free shared buffers cached
Mem:
Low:
High:
-/+ buffers/cache:
Swap:
# 可以看到: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
Linux OOM 自动杀死进程的更多相关文章
- linux 根据进程名杀死进程 -kill进程名
前两天一个老师给我出了一个linux操作上的问题,现在知道进程名怎样杀死这个进程.或许很多人都会和我一样说用 #pkill 进程名 或是 #killall 进程名 的确这个两个命令都能做到这些,而且我 ...
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
场景:实现安装一个apk应用程序的过程.界面如下: 编写如下应用,应用结构如下: <RelativeLayout 编写activity_main.xml布局: <Relative ...
- linux下批量杀死进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...
- Linux基础命令---杀死进程killall
killall killall可以根据名字来杀死进程,它会给指定名字的所有进程发送信息.如果没有指定信号名,则发送SIGTERM.信号可以通过名称(例如-HUP或-SIGHUP)或数字(例如-1)或选 ...
- Linux基础命令---杀死进程pkill
pkill pkill可以给指定的进程发送信息,它可以结束某个执行的进程或者目录登录的用户. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedo ...
- Linux 下批量杀死进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...
- Linux下强制杀死进程的方法
常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ...
- linux实现自动检测进程是否存活的脚本
可以在性能测试过程中.定期检测startAgent和nmon的状态 #!/bin/sh while true do pnmon=`ps aux | grep nmon | grep -v grep`; ...
- linux 强制删除杀死进程 sudo pkill uwsgi -9 杀死uwsgi 关闭防火墙 iptables -F
sudo pkill -f uwsgi -9 四.关闭防火强 iptables -F #清空规则 systemctl stop firewalld #关闭防火墙服务 ...
随机推荐
- eclipse 无用代码扫描工具UCDetector
本文主要介绍UCDetector(无用代码扫描工具)使用方法及局限 对于沉积或多方接手开发的项目经常会遇到一坨一坨无用的代码,但一个一个类查找又相当费时,这里介绍一个eclipse插件扫描没有引用的类 ...
- 【java基础】Java的retry标记的使用
说明:其实retry就是一个标记,标记程序跳出循环的时候从哪里开始执行,功能类似于goto.retry一般都是跟随者for循环出现,第一个retry的下面一行就是for循环,而且第二个retry的前面 ...
- liunx系统环境下,爆出该错误"org.eclipse.wst.validation" has been removed解决办法
导出maven工程遇到的问题,"org.eclipse.wst.validation" has been removed,还以为是工程本身的问题,后来发现是eclipse的问题. ...
- angualrJS(mvc)指令嵌套使用的一些问题
angular的指令拥有一个独立作用域的概念. 一般定义指令的形式: define(['app'],function(mianapp){ mainapp.directive("tlmsAol ...
- Tomcat(64位)免安装版的环境安装与配置
本篇博客主要介绍Tomcat(64位)免安装版的环境安装与配置,该篇文章同样适合于32位Tomcat免安装版的环境安装与配置. 该篇博客中的大部分内容同百度经验中的<出现unable to op ...
- linux性能监控——CPU、Memory、IO、Network
一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上 ...
- git 查看&修改用户名
$ git config user.name 查看用户名 $ git config user.email 查看邮箱 $ git config --global user.name " ...
- struts2学习(13)struts2文件上传和下载(1)
一.Struts2文件上传: 二.配置文件的大小以及允许上传的文件类型: 三.大文件上传: 如果不配置上传文件的大小,struts2默认允许上传文件最大为2M: 2097152Byte: 例子实现 ...
- Linux文件属性,类型,ls -lhi解释行列
Linux文件属性(描述信息) -i inode节点号 -h 人类可读 ls -lhi 1703938 drwxr-xr-x 2 rsync rsync 4.0K Jun 7 07:24 gamese ...
- USB通信协议
转自http://blog.csdn.net/myarrow/article/details/8484113 0. 基本概念 一个[传输](控制.批量.中断.等时):由多个[事务]组成: 一个[事务] ...