推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】

Linux——》Out of memory:kill process

  • 1、操作
  • 2、现象
    • (1)查看系统日志文件
    • (2)查看哪个进程被kill
  • 3、原因
  • 4、解决

1、操作

正常访问数据库

2、现象

mysql服务被linux系统kill掉

(1)查看系统日志文件

/var/log/messages
![lQLPJxbhnq4rqUrNAULNBIqw5cx9kDTlfxcDcrjMJ0CFAQ_1162_322.png](https://img-blog.csdnimg.cn/img_convert/da8872a86018a9d0d7b499b621f9bab5.png#averageHue=#020000&clientId=u8806acf9-8162-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=322&id=GLPEp&margin=[object Object]&name=lQLPJxbhnq4rqUrNAULNBIqw5cx9kDTlfxcDcrjMJ0CFAQ_1162_322.png&originHeight=322&originWidth=1162&originalType=binary&ratio=1&rotation=0&showTitle=false&size=120021&status=done&style=none&taskId=u75d5b1c0-3713-45bb-bd27-2564efca69a&title=&width=1162)

(2)查看哪个进程被kill

最占用内存的进程。

3、原因

由于系统内存不足,触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。

Linux 内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于每个进程的,内核直接回收利用的话比较麻烦,所以内核采用一种过度分配内存(over-commit memory)的办法来间接利用这部分 “空闲” 的内存,提高整体内存的使用效率。一般来说这样做没有问题,但当大多数应用程序都消耗完自己的内存的时候麻烦就来了,因为这些应用程序的内存需求加起来超出了物理内存(包括 swap)的容量,内核(OOM killer)必须杀掉一些进程才能腾出空间保障系统正常运行。用银行的例子来讲可能更容易懂一些,部分人取钱的时候银行不怕,银行有足够的存款应付,当全国人民(或者绝大多数)都取钱而且每个人都想把自己钱取完的时候银行的麻烦就来了,银行实际上是没有这么多钱给大家取的。

:::info
Q:系统内存不足的原因?
A:
1、本身内存小
2、通常在多应用集中部署在一台机器上,管理不当或应用压力突增
:::

4、解决

(1)增加系统内存,尽量保证内存充足
(2)在多实例应用部署时,需要注意对内存的分配。
(3)优化进程,使其占用内存降低
(4)使用oom_score_adj参数,这个参数会被计算入oom_score,可以避免进程被杀死(不推荐使用)。

在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息:
Out of Memory: Killed process [PID] [process name].

OOM(out-of-memory) killer是通过/proc//oom_score这个值来决定哪个进程被干掉的。
这个值是系统综合进程的内存消耗量、CPU时间(utime + stime)、存活时间(uptime - start time)和oom_adj计算出的,消耗内存越多分越高,存活时间越长分越低。
总之,总的策略是:损失最少的工作,释放最大的内存同时不伤及无辜的用了很大内存的进程,并且杀掉的进程数尽量少。

Sep 19 14:58:00 test08 kernel: [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name
Sep 19 14:58:00 test08 kernel: [18871] 0 18871 502855 5227 0 0 0 mc-exe
Sep 19 14:58:00 test08 kernel: [18872] 0 18872 1842475 148013 1 0 0 mc-exe
Sep 19 14:58:00 test08 kernel: [18873] 0 18873 502855 3176 1 0 0 mc-exe
Sep 19 14:58:00 test08 kernel: Out of memory: Kill process 18872 (mc) score 43 or sacrifice child
Sep 19 14:58:00 test08 kernel: Killed process 18872, UID 0, (mc) total-vm:7369900kB, anon-rss:558044kB, file-rss:34008kB
其中,上面列表中total_vm,rss的单位是4K(单个内存页面的大小),18872进程使用了不到600M(anon-rss+file-rss)的内存,
根据每个进程的oom_score选出来了18872,kill掉了,18872进程并没有占用大量内存,也没有其他进程占用超过600M的物理内存,只是整个系统的物理内存(4G)不够用导致了,占用最大的进程被杀死了;
OOM触发的详细分析如下:
Sep 18 09:19:15 test08 kernel: mc invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
从上面日志看,gfp_mask=0x280da的低2位bit是2,表示此次申请内存是从Normal空间内存块申请内存,
Sep 18 09:19:15 test08 kernel: Node 0 Normal free:8356kB min:8464kB low:10580kB high:12696kB
上面的free表示Normal空间的空闲内存,min、low、high是三个阈值, 当free小于min时,会触发OOM
下面这行日志显示了Normal空间空闲的内存块的详细信息,也可以通过命令cat /proc/buddyinfo查看当前系统得空闲块

Linux——》Out of memory:kill process相关推荐

  1. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析

    转自:http://www.111cn.net/sys/CentOS/84755.htm 从Out of memory来看是内存超出了,后面的 Kill process[PID] [process n ...

  2. 理解和配置Out of memory: Kill process

    转自:爱开源 理解 OOM killer 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通 ...

  3. Mongodb副本集--Out of memory: Kill process 37325 (mongod)

    Mongodb副本集--Out of memory: Kill process 37325 (mongod) 1.Mongodb副本集--Out of memory: Kill process 373 ...

  4. Out of memory: Kill process 内存不足

    服务直接被 killed,感觉特别奇怪.代码肯定是没有问题的,但为什么放到服务器上就出错了呢. 部署时报错如下: Shell代码   Failed to add the deployment cont ...

  5. Out of memory: Kill process 解决

    Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释 ...

  6. 极智读书 | 《树莓派开始,玩转Linux》读书分享

        感谢杭州地铁六号线,这里有我大把的美好读书时间.     这次要分享的书是<树莓派开始,玩转Linux>. 书简介     先上封面:     树莓派是我三年前刚接触硬件入手的一个 ...

  7. 《循序渐进Linux》第二版即将出版发行(附封面)

    从<循序渐进Linux>第一版发布,到现在已经近6年了,6年的时间,技术发生了很大的变化,Linux系统的内核版本从2.6.9(RHEL4.x)已经更新到了现在的3.10(Centos7. ...

  8. 博主作品《循序渐进Linux》第二版出版发行啦(附封面和目录)

    从<循序渐进Linux>第一版发布,到现在已经近6年了,6年的时间,技术发生了很大的变化,Linux系统的内核版本从2.6.9(RHEL4.x)已经更新到了现在的3.10(Centos7. ...

  9. 【每日Linux】《Linux》

    [每日Linux]<Linux> 标签(空格分隔):[everyday] 文章目录 第0章 计算机概论 0.1 计算机 0.1.1 计算机的五大部件 0.1.2 CPU的架构:RISC 和 ...

最新文章

  1. mysql锁表_MYSQL锁表问题的解决方法
  2. Ubuntu 组态 Tomcat而每天的错误解决
  3. Android Region代码分析
  4. 服务器内存一般多大_各类网站服务器内存多大才合适?
  5. Jenkins设置用户权限
  6. 找回mysql root密码_找回MySQL的root密码
  7. Excel 自动更正选项
  8. Linux下Console的分类与切换
  9. html设置团偏跟着移动,雷阵雨云团向东偏南移动,北京两地将有强降雨+7级大风+冰雹!...
  10. 判断一个路径串是否为有效目录
  11. MySQL高级-视图
  12. HUT-XXXX Strange display 容斥定理,线性规划
  13. HIbernate抽象出通用方法
  14. 在C#中嵌入Flash对象时遇到未能导入activex 控件的问题
  15. Linux(乌班图 )系统下安装jdk 和eclipse开发IDE
  16. Git Diff 魔法
  17. Bailian2704 竞赛评分【文本】
  18. matlab贝塔分布,怎么拟合贝塔分布函数
  19. oracle sys改密码,忘记oracle的sys用户密码怎么修改
  20. csma研究背景_CSMA/CD协议的特点

热门文章

  1. 如何管理你的手机存储空间,告别微信内存过大!
  2. Matlab学习 矩阵分解,特征值, 特征向量
  3. 安全管家安卓_优优手机管家下载-优优手机管家手机版下载v1.0.0
  4. 公司网站如何让用户使用QQ第三方登录
  5. Jmeter性能测试【应用场景、性能测试流程、搭建测试环境】
  6. 复杂网络分析(二)—社会网络(2)
  7. 寻找拉马努金数(Python实现)
  8. 汉仪字库与中国美术学院字体设计工作站正式建立
  9. 6.泡妞与设计模式(七)策略模式
  10. 神经网络低比特量化——DSQ