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 #关闭防火墙服务 ...
随机推荐
- 每天一个linux命令(文件操作):【转载】which命令
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- Java并发--Thread类详情
以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 转载原文链接:http://www.cnblogs.com/dolphin0520/p/3920357.html 一 ...
- NullReferenceException,就不应该存在!
如果要你说出 .NET 中的三个异常,NullReferenceException 一定会成为其中一个:如果说出 .NET 中的一个异常,NullReferenceException 也会被大多数人说 ...
- python 开始学习
"人生苦短, 我用python" ---------以此敬意伟大的生产力创造!
- 1G1核1M选择 Centos 32位 还是 Centos 64位?
前几天有个疑惑,现有一台云主机是 1G1核1M使用 Centos 64位会不有点浪费. 还专门发信息询问老大 Karson,老大说现 FastAdmin 都是三个1,也是 64 位的. 看 FastA ...
- (转)Android内存泄漏分析及调试
http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析 首先了解一下dalvik的Ga ...
- 1.JMeter===添加响应断言
断言即Lr中的检查点,我们在进行测试时,需要对每次请求测试的返回做检验 1.以百度做案例,添加线程组==添加HTTP请求==添加查看结果树 2.在HTTP请求下添加响应断言 注:模式匹配规则,比较常用 ...
- 优化RequireJS项目(合并与压缩)
关于RequireJS已经有很多文章介绍过了.这个工具可以将你的JavaScript代码轻易的分割成苦 干个模块(module)并且保持你的代码模块化与易维护性.这样,你将获得一些具有互相依赖关系的J ...
- vue的路由初识01
今天就做了一个vue-router的实例,(路由跳转,参数的传递[一个参数,多个参数])<!DOCTYPE html> <html> <head> <meta ...
- 老齐python-基础3(列表)
1.定义一个列表 >>> a = [] #创建一个空列表 >>> type(a) #查看数据类型 <class 'list'> >>> ...