首页 > 编程语言 >使用dmesg发现程序出现Out of memory的Case

使用dmesg发现程序出现Out of memory的Case

时间:2024-04-28 09:03:02浏览次数:21  
标签:Case dmesg oom score 内存 memory adj rss

dmesg(display message)是Linux和Unix系统中的一个命令行工具,用于显示内核与系统硬件交互的消息。运行此命令可能会显示一些关于系统错误或崩溃的信息:

我使用了下面命令,

dmesg -T | tail

参数说明:

  • -T:显示人类可读的时间戳,而不是默认的自系统启动以来的秒数。

发现了下面情况:

[Fri Apr 26 10:22:44 2024] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-0.slice/session-6695.scope,task=website20240424,pid=1508765,uid=0

[Fri Apr 26 10:22:44 2024] Out of memory: Killed process 1508765 (website20240424) total-vm:2380796kB, anon-rss:574076kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1328kB oom_score_adj:0

从上面输出信息来看,website20240424这个程序在被杀时占用的内存信息包括:

  • total-vm:2380796kB:这表示程序占用的虚拟内存总量是2380796kB,约为2.38GB
  • anon-rss:574076kB:这表示程序占用的匿名常驻内存(不包括交换空间的内存)是574076kB,约为574MB
  • file-rss:0kB、shmem-rss:0kB:表示程序从文件映射和共享内存中占用的内存都为0kB

从这些数据可以看出,主要的内存占用来自于匿名常驻内存(anon-rss),约为574MB。由于内存不足,操作系统内存管理器触发了“Out of memory”(内存不足)的处理机制,选择了oom_score_adj值为0的这个进程进行kill,以释放内存资源。

oom_score_adj

oom_score_adj(OOM得分调整值)是Linux操作系统中一个用来决定当系统内存不足时哪个进程将被杀死的参数。这个值可以帮助操作系统的Out-Of-Memory(OOM)杀手决定在多个候选进程中哪个最应该被终止以释放内存。

oom_score_adj 的工作机制:

  • 数值范围oom_score_adj的取值范围从-1000到+1000。值越高,表示进程越有可能被OOM杀手选中杀死。
  • 默认值:大多数普通进程的oom_score_adj是0。这个值可以通过特定的系统接口进行调整,以表示某些进程比其他进程更重要或者更不重要。
  • 特殊情况:一些关键的系统进程可能会设置一个较低的oom_score_adj(比如-1000),使其在内存不足时尽量不被杀死。
  • 影响因素:进程使用的内存量oom_score_adj值共同决定了一个进程的oom_score。系统会选择oom_score最高的进程进行杀死。

dmesg 常用参数和用法

dmesg 命令的输出可以通过管道传递给其他命令,如 grep,以帮助你查找特定的信息。例如,查找与 USB 设备相关的消息:

dmesg | grep USB

常用选项

  • -H:开启人类可读的输出模式,使用彩色输出,并且消息会根据时间戳进行分组。
  • -w:实时监控新的内核消息。
  • -T:显示人类可读的时间戳,而不是默认的自系统启动以来的秒数。
  • -c:显示消息后清除内核的环形缓冲区。这个选项需要管理员权限。

标签:Case,dmesg,oom,score,内存,memory,adj,rss
From: https://www.cnblogs.com/ghj1976/p/18162939/shi-yongdmesg-fa-xian-cheng-xu-chu-xianout-of-m

相关文章

  • 第四章:Total Store Order and the x86 Memory Model
    chapter4:TSO于X86内存模型1、为什么需要TSO/x86处理器内核长期以来使用writebuffer来保存已提交的store指令,直到内存系统可以处理这些store请求。当store指令提交时,store请求进入writebuffer,而当需要写入的缓存行在内存系统中可以保证缓存一致性时,store请求就退出writebuffer......
  • Memory Layout of the C program
    reference:CompilationStepsandMemoryLayoutoftheCProgramStorageClassRAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储TableofContentsMemoryLayoutoftheCProgramWhenyourunanyCprogram,itsexecutableimageis......
  • Compilation Steps and Memory Layout of the C program
    TableofContentsTableofContentsWhatarethefourstagesofthecompilationprocess?PreprocessingCompilationAssemblyLinkingWhatarethefourstagesofthecompilationprocess?NormallycompilingaCprogramisamulti-stageprocessandut......
  • 第三章:Memory Consistency Motivation and Sequential Consistency
    chapter3:内存为什么需要consistency和顺序Consistency本章深入研究内存consistency模型,这些模型为程序员和实现者定义了共享内存系统的行为。这些模型定义了行为正确性,以便程序员知道期望什么,实现者知道提供什么。1、共享内存行为存在的问题要了解为什么必须定义共享内存行......
  • Docker(二十)-Docker容器CPU、memory资源限制
    背景在使用docker运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可......
  • img case1
    <body><divclass="slider"><divclass="slider-wrapper"><imgsrc="./test1.png"alt=""/><divclass="box">X</div><......
  • Spark设置executor-memory后,executor显示的内存不符问题
    以该命令为例,我们设置一个executor并分配内存为2800m,可以看到ui上只给executor分配了1.5G的内存。同理,如果你设置了--executor-memory=1g,那么实际上只会有1048.8M的内存会被分配。spark-submit--masteryarn\--num-executors=1\--executor-memory=2800m\--classorg.apac......
  • Java switch() case中的switch可用的数据类型 byte,shor,int ,string ,char不能是long
    Javaswitch()case中的switch可用的数据类型   byte,shor,int,string,char1.swtich()里面必须是int和enum--即枚举类型。2.short、char或者byte他会自动转换为int的。。3.long不能自动转换为int,因为long比int范围大..可能会丢失精度..4.java把string也'转化'成int了,用......
  • linux系统是未来_大小写敏感_case_sensitive_编程原生态
    修改py文件......
  • Case表达式
    在发现结果为真的WHEN子句时,CASE表达式的真假值判断会终止,剩余的WHEN子句会被忽略:CASEWHENcol_1IN('a','b')THEN'第一'WHENcol_1IN('a')THEN'第二'ELSE'其他'END注意:统一各分支返回的数据类型.记得写end.写else子句的习惯,否则执行结果默认处理为null......