Linux——》Out of memory:kill process
创始人
2024-01-29 04:58:58
0

推荐链接:
    总结——》【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查看当前系统得空闲块

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...