Out of memory, OOM killer输出信息分析

2024-05-27 11:18

本文主要是介绍Out of memory, OOM killer输出信息分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当out of memory发生时,out_of_memory函数会选择一个内核认为犯有分配过多内存 “罪行”的进程,并杀死该进程。

这就有很大的几率腾出较多的空闲页,然后再跳转回重试内存分配的操作。

这里我们不讨论out_of_memory 函数流程 选择要牺牲进程的策略方法。

我们仅讨论out of memory发生时,内核输出信息的含义。


1. OOM 信息

以下是一段典型的out of memory 内核输出信息:

[html]  view plain copy
  1. <4>[12345.342532] systemd-journal invoked oom-killer: gfp_mask=0x800d0order=0oom_score_adj=0  
  2. <4>[12345.351216] CPU: 1 PID: 1371 Comm: systemd-journal Tainted: G           O 3.14.31-00017-g40fab71 #1  
  3. <4>[12345.360695] Backtrace:  
  4. <4>[12345.363263] [<c0012fcc>] (dump_backtrace) from [<c00131a4>] (show_stack+0x20/0x24)  
  5. <4>[12345.371192]  r6:00000000 r5:ffffffff r4:00000000 r3:bd943631  
  6. <4>[12345.377136] [<c0013184>] (show_stack) from [<c07bbe78>] (dump_stack+0x7c/0xc8)  
  7. <4>[12345.384710] [<c07bbdfc>] (dump_stack) from [<c07ba7e4>] (dump_header.isra.14+0x74/0x188)  
  8. <4>[12345.393184]  r6:000800d0 r5:00000000 r4:e8088000 r3:00000002  
  9. <4>[12345.399126] [<c07ba770>] (dump_header.isra.14) from [<c00f8a28>] (oom_kill_process+0x230/0x3e0)  
  10. <4>[12345.408234]  r10:00000000 r8:000800d0 r7:00000000 r6:c0b89aa8 r5:000800d0 r4:e9bb79c0  
  11. <4>[12345.416462] [<c00f87f8>] (oom_kill_process) from [<c00f90c8>] (out_of_memory+0x2f4/0x354)  
  12. <4>[12345.425024]  r10:00000000 r9:00000000 r8:000800d0 r7:00000000 r6:c0b89aa8 r5:c0b89d08  
  13. <4>[12345.433249]  r4:c0b89aa8  
  14. <4>[12345.435903] [<c00f8dd4>] (out_of_memory) from [<c00fd6c8>] (__alloc_pages_nodemask+0x93c/0x988)  
  15. <4>[12345.445011]  r10:00000000 r9:c0c38fc0 r8:c0b871d8 r7:e8088000 r6:c0c39bc0 r5:00000000  
  16. <4>[12345.453234]  r4:000800d0  
  17. <4>[12345.455887] [<c00fcd8c>] (__alloc_pages_nodemask) from [<c00fd734>] (__get_free_pages+0x20/0x3c)  
  18. <4>[12345.465087]  r10:e97d36a8 r9:00000063 r8:e8089f6c r7:00000063 r6:b6f79f68 r5:e97d36a8  
  19. <4>[12345.473311]  r4:00000000  
  20. <4>[12345.475965] [<c00fd714>] (__get_free_pages) from [<c0196878>] (proc_pid_readlink+0x68/0x110)  
  21. <4>[12345.484808] [<c0196810>] (proc_pid_readlink) from [<c013dcb8>] (SyS_readlinkat+0xf0/0x104)  
  22. <4>[12345.493461]  r7:bea40520 r6:ffffff9c r5:00004000 r4:00000000  
  23. <4>[12345.499402] [<c013dbc8>] (SyS_readlinkat) from [<c000eee0>] (ret_fast_syscall+0x0/0x34)  
  24. <4>[12345.507785]  r10:00000000 r9:e8088000 r8:c000f148 r7:0000014c r6:00000063 r5:b6f79f68  
  25. <4>[12345.516011]  r4:00000064  
  26. <4>[12345.518663] Mem-info:  
  27. <4>[12345.521049] Normal per-cpu:  
  28. <4>[12345.523969] CPU    0: hi:   42, btch:   7 usd:  23  
  29. <4>[12345.528979] CPU    1: hi:   42, btch:   7 usd:  25  
  30. <4>[12345.534004] HighMem per-cpu:  
  31. <4>[12345.537013] CPU    0: hi:  186, btch:  31 usd:  27  
  32. <4>[12345.542199] CPU    1: hi:  186, btch:  31 usd:  29  
  33. <4>[12345.547247] active_anon:21860 inactive_anon:14790 isolated_anon:0  
  34. <4>[12345.547247]  active_file:41585 inactive_file:10422 isolated_file:0  
  35. <4>[12345.547247]  unevictable:0 dirty:9 writeback:205 unstable:0  
  36. <4>[12345.547247]  free:285748 slab_reclaimable:2100 slab_unreclaimable:26286  
  37. <4>[12345.547247]  mapped:26079 shmem:14857 pagetables:687 bounce:0  
  38. <4>[12345.547247]  free_cma:57779  
  39. <4>[12345.581839] Normal free:233460kB min:2488kB low:3108kB high:3732kB active_anon:17312kB   
  40. inactive_anon:10824kB active_file:128kB inactive_file:4kB unevictable:0kB isolated(anon):0kB   
  41. isolated(file):0kB present:774144kB managed:387568kB mlocked:0kB dirty:16kB writeback:76kB   
  42. mapped:3296kB shmem:10840kB slab_reclaimable:8400kB slab_unreclaimable:105144kB kernel_stack:1168kB   
  43. pagetables:2748kB unstable:0kB bounce:0kB free_cma:231116kB writeback_tmp:0kB pages_scanned:1648   
  44. all_unreclaimable? yes  
  45. <4>[12345.627014] lowmem_reserve[]: 0 10168 10168  
  46. <4>[12345.631565] HighMem free:909036kB min:512kB low:2604kB high:4696kB active_anon:70632kB   
  47. inactive_anon:48336kB active_file:166212kB inactive_file:41684kB unevictable:0kB isolated(anon):0kB   
  48. isolated(file):0kB present:1301504kB managed:1301504kB mlocked:0kB dirty:20kB writeback:744kB   
  49. mapped:101020kB shmem:48588kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB   
  50. pagetables:0kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0   
  51. all_unreclaimable? no  
  52. <4>[12345.675614] lowmem_reserve[]: 0 0 0  
  53. <4>[12345.679437] Normal: 1165*4kB (MRC) 1122*8kB (RC) 1119*16kB (RC) 1118*32kB (C) 1068*64kB (RC)   
  54. 748*128kB (C) 0*256kB 0*512kB 0*1024kB 1*2048kB (R) 0*4096kB 0*8192kB = 233460kB  
  55. <4>[12345.695797] HighMem: 99*4kB (M) 1148*8kB (UM) 1314*16kB (UM) 880*32kB (UM) 327*64kB (M)   
  56. 87*128kB (M) 34*256kB (M) 38*512kB (M) 12*1024kB (M) 10*2048kB (M) 3*4096kB (M) 91*8192kB (UMR) = 909516kB  
  57. <4>[12345.714293] 66770 total pagecache pages  
  58. <4>[12345.718309] 0 pages in swap cache  
  59. <4>[12345.724832] Swap cache stats: add 0, delete 0, find 0/0  
  60. <4>[12345.730308] Free swap  = 0kB  
  61. <4>[12345.733412] Total swap = 0kB  
  62. <4>[12345.747245] 520192 pages of RAM  
  63. <4>[12345.750577] 286253 free pages  
  64. <4>[12345.753778] 97924 reserved pages  
  65. <4>[12345.757258] 28061 slab pages  
  66. <4>[12345.760574] 115601 pages shared  
  67. <4>[12345.764283] 0 pages swap cached  
  68. <6>[12345.767572] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name  
  69. <6>[12345.775906] [ 1366]     0  1366      459      125       3        0             0 sh  
  70. <6>[12345.785861] [ 1367]     0  1367      665      235       4        0             0 propertyd  
  71. <6>[12345.794802] [ 1368]     0  1368    26553     8835      58        0             0 seed  
  72. <6>[12345.803296] [ 1371]     0  1371     1648      772       5        0             0 systemd-journal  
  73. <6>[12345.812792] [ 1375]     0  1375      750      300       4        0         -1000 systemd-udevd  
  74. <6>[12345.822449] [ 2416]  1040  2416     3852      510       7        0             0 secd  
  75. <6>[12345.831341] [ 2419]     0  2419     6678      923       9        0             0 storagemanagerd  
  76. <6>[12345.840944] [ 2420]     0  2420     1267      497       5        0             0 connmand  
  77. <6>[12345.849566] [ 2422]     0  2422     4484      687       8        0             0 uuid  
  78. <6>[12345.857843] [ 2424]     0  2424     1161      358       5        0             0 connman-vpnd  
  79. <6>[12345.867271] [ 2427]  1000  2427     1593      461       6        0             0 logboxd  
  80. <6>[12345.875846] [ 2432]     0  2432     9483     1718      15        0             0 cmns  
  81. <6>[12345.884104] [ 2451]    81  2451     1355      474       4        0          -900 dbus-daemon  
  82. <6>[12345.893018] [ 2532]     0  2532    11794      246      10        0             0 adbd  
  83. <6>[12345.901304] [ 2535]     0  2535     1502      347       5        0             0 wpa_supplicant  
  84. <6>[12345.910473] [ 2536]     0  2536    12820      866      12        0             0 udisksd  
  85. <6>[12345.919119] [ 2537]     0  2537     1898      527       6        0             0 tyid  
  86. <6>[12345.927361] [ 2540]     0  2540    10076     2157      16        0             0 datamanagerd  
  87. <6>[12345.936349] [ 2554]     0  2554     5983      574       7        0             0 connectivityser  
  88. <6>[12345.945635] [ 2558]     0  2558    10604     5388      21        0             0 weston  
  89. <6>[12345.964101] [ 2589]     0  2589    14597     1917      17        0             0 pagemanagerd  
  90. <6>[12345.973272] [ 2590]     0  2590     3832      515       7        0             0 amt  
  91. <6>[12345.981730] [ 2593]     0  2593     6176     1343      12        0             0 weston-desktop-  
  92. <6>[12345.991046] [ 2599]     0  2599     7185      761      12        0             0 scim-launcher  
  93. <6>[12346.098925] [ 5580]     0  5580      458      116       3        0             0 sh  
  94. <6>[12346.107065] [ 5581]     0  5581      492      175       3        0             0 gzip  
  95. <3>[12346.115335] Out of memory: Kill process 5575 thread_x score 481 or sacrifice child  
  96. <3>[12346.124212] Killed process 5575 thread_x total-vm:106212kB, anon-rss:18036kB, file-rss:2704kB  

2 OOM信息分析

2.1

[html]  view plain copy
  1. <4>[12345.342532] systemd-journal invoked oom-killer: gfp_mask=0x800d0order=0oom_score_adj=0  
systemd-joural: 当前进程为systemd-journal,请求分配页面时,引发了oom-killer

gfp_mask=0x800d0: 是alloc_page的GFP标志,对于当前场景,代表___GFP_RECLAIMABLE | ___GFP_HIGH | ___GFP_IO | ___GFP_FS

order=0 : 表示alloc_page的order为0, 也就是说仅请求1^0=1个页面,

oom_score_adj=0: 表明这个进程被杀的几率, oom_score_adj取值0(never kill)~1000(always kill)


[html]  view plain copy
  1. <4>[12345.351216] CPU: 1 PID: 1371 Comm: systemd-journal Tainted: G           O 3.14.31-00017-g40fab71 #1  
  2. <4>[12345.360695] Backtrace:  
  3. <4>[12345.363263] [<c0012fcc>] (dump_backtrace) from [<c00131a4>] (show_stack+0x20/0x24)  
  4. <4>[12345.371192]  r6:00000000 r5:ffffffff r4:00000000 r3:bd943631  
  5. <4>[12345.377136] [<c0013184>] (show_stack) from [<c07bbe78>] (dump_stack+0x7c/0xc8)  
  6. <4>[12345.384710] [<c07bbdfc>] (dump_stack) from [<c07ba7e4>] (dump_header.isra.14+0x74/0x188)  
  7. <4>[12345.393184]  r6:000800d0 r5:00000000 r4:e8088000 r3:00000002  
  8. <4>[12345.399126] [<c07ba770>] (dump_header.isra.14) from [<c00f8a28>] (oom_kill_process+0x230/0x3e0)  
  9. <4>[12345.408234]  r10:00000000 r8:000800d0 r7:00000000 r6:c0b89aa8 r5:000800d0 r4:e9bb79c0  
  10. <4>[12345.416462] [<c00f87f8>] (oom_kill_process) from [<c00f90c8>] (out_of_memory+0x2f4/0x354)  
  11. <4>[12345.425024]  r10:00000000 r9:00000000 r8:000800d0 r7:00000000 r6:c0b89aa8 r5:c0b89d08  
  12. <4>[12345.433249]  r4:c0b89aa8  
  13. <4>[12345.435903] [<c00f8dd4>] (out_of_memory) from [<c00fd6c8>] (__alloc_pages_nodemask+0x93c/0x988)  
  14. <4>[12345.445011]  r10:00000000 r9:c0c38fc0 r8:c0b871d8 r7:e8088000 r6:c0c39bc0 r5:00000000  
  15. <4>[12345.453234]  r4:000800d0  
  16. <4>[12345.455887] [<c00fcd8c>] (__alloc_pages_nodemask) from [<c00fd734>] (__get_free_pages+0x20/0x3c)  
  17. <4>[12345.465087]  r10:e97d36a8 r9:00000063 r8:e8089f6c r7:00000063 r6:b6f79f68 r5:e97d36a8  
  18. <4>[12345.473311]  r4:00000000  
  19. <4>[12345.475965] [<c00fd714>] (__get_free_pages) from [<c0196878>] (proc_pid_readlink+0x68/0x110)  
  20. <4>[12345.484808] [<c0196810>] (proc_pid_readlink) from [<c013dcb8>] (SyS_readlinkat+0xf0/0x104)  
  21. <4>[12345.493461]  r7:bea40520 r6:ffffff9c r5:00004000 r4:00000000  
  22. <4>[12345.499402] [<c013dbc8>] (SyS_readlinkat) from [<c000eee0>] (ret_fast_syscall+0x0/0x34)  
  23. <4>[12345.507785]  r10:00000000 r9:e8088000 r8:c000f148 r7:0000014c r6:00000063 r5:b6f79f68  
  24. <4>[12345.516011]  r4:00000064  

dump_header->dump_stack的输出的引发OOM的调用函数栈,从ret_fast_syscall开始dump_backtrace。

通过这段输出,可以推测systemd-journal调用readlink系统调用时,引发的一次分页操作,导致了OOM。


2.2

[html]  view plain copy
  1. <4>[12345.518663] Mem-info:  
  2. <4>[12345.521049] Normal per-cpu:  
  3. <4>[12345.523969] CPU    0: hi:   42, btch:   7 usd:  23  
  4. <4>[12345.528979] CPU    1: hi:   42, btch:   7 usd:  25  
  5. <4>[12345.534004] HighMem per-cpu:  
  6. <4>[12345.537013] CPU    0: hi:  186, btch:  31 usd:  27  
  7. <4>[12345.542199] CPU    1: hi:  186, btch:  31 usd:  29  
  8. <4>[12345.547247] active_anon:21860 inactive_anon:14790 isolated_anon:0  
  9. <4>[12345.547247]  active_file:41585 inactive_file:10422 isolated_file:0  
  10. <4>[12345.547247]  unevictable:0 dirty:9 writeback:205 unstable:0  
  11. <4>[12345.547247]  free:285748 slab_reclaimable:2100 slab_unreclaimable:26286  
  12. <4>[12345.547247]  mapped:26079 shmem:14857 pagetables:687 bounce:0  
  13. <4>[12345.547247]  free_cma:57779  
  14. <4>[12345.581839] Normal free:233460kB min:2488kB low:3108kB high:3732kB active_anon:17312kB   
  15. inactive_anon:10824kB active_file:128kB inactive_file:4kB unevictable:0kB isolated(anon):0kB   
  16. isolated(file):0kB present:774144kB managed:387568kB mlocked:0kB dirty:16kB writeback:76kB   
  17. mapped:3296kB shmem:10840kB slab_reclaimable:8400kB slab_unreclaimable:105144kB kernel_stack:1168kB   
  18. pagetables:2748kB unstable:0kB bounce:0kB free_cma:231116kB writeback_tmp:0kB pages_scanned:1648   
  19. all_unreclaimable? yes  
  20. <4>[12345.627014] lowmem_reserve[]: 0 10168 10168  
  21. <4>[12345.631565] HighMem free:909036kB min:512kB low:2604kB high:4696kB active_anon:70632kB   
  22. inactive_anon:48336kB active_file:166212kB inactive_file:41684kB unevictable:0kB isolated(anon):0kB   
  23. isolated(file):0kB present:1301504kB managed:1301504kB mlocked:0kB dirty:20kB writeback:744kB   
  24. mapped:101020kB shmem:48588kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB   
  25. pagetables:0kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no  
  26. <4>[12345.675614] lowmem_reserve[]: 0 0 0  
  27. <4>[12345.679437] Normal: 1165*4kB (MRC) 1122*8kB (RC) 1119*16kB (RC) 1118*32kB (C) 1068*64kB (RC)   
  28. 748*128kB (C) 0*256kB 0*512kB 0*1024kB 1*2048kB (R) 0*4096kB 0*8192kB = 233460kB  
  29. <4>[12345.695797] HighMem: 99*4kB (M) 1148*8kB (UM) 1314*16kB (UM) 880*32kB (UM) 327*64kB (M)   
  30. 87*128kB (M) 34*256kB (M) 38*512kB (M) 12*1024kB (M) 10*2048kB (M) 3*4096kB (M) 91*8192kB (UMR) = 909516kB  
  31. <4>[12345.714293] 66770 total pagecache pages  
  32. <4>[12345.718309] 0 pages in swap cache  
  33. <4>[12345.724832] Swap cache stats: add 0, delete 0, find 0/0  
  34. <4>[12345.730308] Free swap  = 0kB  
  35. <4>[12345.733412] Total swap = 0kB  
  36. <4>[12345.747245] 520192 pages of RAM  
  37. <4>[12345.750577] 286253 free pages  
  38. <4>[12345.753778] 97924 reserved pages  
  39. <4>[12345.757258] 28061 slab pages  
  40. <4>[12345.760574] 115601 pages shared  
  41. <4>[12345.764283] 0 pages swap cached  
dump_header->show_mem输出当前系统内存信息。

2.2.1

<4>[12345.521049] Normal per-cpu:
<4>[12345.523969] CPU    0: hi:   42, btch:   7 usd:  23
<4>[12345.528979] CPU    1: hi:   42, btch:   7 usd:  25
<4>[12345.534004] HighMem per-cpu:
<4>[12345.537013] CPU    0: hi:  186, btch:  31 usd:  27
<4>[12345.542199] CPU    1: hi:  186, btch:  31 usd:  29
每个内存管理区定义了一个“每CPU”页框高速缓存,所有“每CPU”高速缓存包含一些预先分配的页框,它们被用于满足本地CPU 发出的单个页内存请求。

CPU    0: hi:   42, btch:   7 usd:  23

表示 CPU 0, 

hi: 42 表示上限值,超过这个数字,则释放batch个页框到buddy系统中

btch: 7 表示向高速缓存添加或者删除页框时,页框块的大小

usd: 23 页框高速缓存中的页框数目

2.2.2

[html]  view plain copy
  1. <4>[12345.547247] active_anon:21860 inactive_anon:14790 isolated_anon:0  
  2. <4>[12345.547247]  active_file:41585 inactive_file:10422 isolated_file:0  
  3. <4>[12345.547247]  unevictable:0 dirty:9 writeback:205 unstable:0  
  4. <4>[12345.547247]  free:285748 slab_reclaimable:2100 slab_unreclaimable:26286  
  5. <4>[12345.547247]  mapped:26079 shmem:14857 pagetables:687 bounce:0  
  6. <4>[12345.547247]  free_cma:57779  

active_anon: 活动的匿名映射,"活动"是指最近被访问过,"匿名"则指页面映射不与任何数据源相关

inactive_anon: 非活动的匿名映射

isolated_anon: DON'T KNOW

active_file: 活动的文件映射,页面映射和磁盘文件相关联

inactive_file: 非活动的文件映射

isolated_file: DON'T KNOW

unevictable:

dirty: 脏页面,表示页面的内容和快设备上的原始内容已经不一至

writeback: 当前页面正处在回写状态

unstable:

free: 空闲页面

slab_relaimable: slab cache中可回收的页面

slab_unreclaimable: slab cache中不可以回收的页面

mapped: BH_MAPPED,表示这个页面被用做快设备的buffer映射,注意这个映射不同于anon和file映射。

shmem: 用于共享内存映射的页面

pagetable: 页表占用的页面,也就是PTE PTD占用的页面数目

bounce:

free_cma: continuous memory allocator的空闲页面。


2.2.3

[html]  view plain copy
  1. <4>[12345.581839] Normal free:233460kB min:2488kB low:3108kB high:3732kB active_anon:17312kB inactive_anon:10824kB   
  2. active_file:128kB inactive_file:4kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:774144kB   
  3. managed:387568kB mlocked:0kB dirty:16kB writeback:76kB mapped:3296kB shmem:10840kB slab_reclaimable:8400kB   
  4. slab_unreclaimable:105144kB kernel_stack:1168kB pagetables:2748kB unstable:0kB bounce:0kB free_cma:231116kB   
  5. writeback_tmp:0kB pages_scanned:1648 all_unreclaimable? yes  
  6. <4>[12345.627014] lowmem_reserve[]: 0 10168 10168  
  7. <4>[12345.631565] HighMem free:909036kB min:512kB low:2604kB high:4696kB active_anon:70632kB inactive_anon:48336kB   
  8. active_file:166212kB inactive_file:41684kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:1301504kB   
  9. managed:1301504kB mlocked:0kB dirty:20kB writeback:744kB mapped:101020kB shmem:48588kB slab_reclaimable:0kB   
  10. slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB   
  11. pages_scanned:0 all_unreclaimable? no  
  12. <4>[12345.675614] lowmem_reserve[]: 0 0 0  

Normal free: Normal zone的空闲空间

min, low, high是normal zone执行页面置换的几个水印

lowmem_reserve: 表示该分zone为其他zone预留的可分配页面数

present: 表示zone的物理内存大小

managed: 是buddy系统管理的present内存大小,managed = preset - reserved

其他值可参考2.2.2节,除了数值代表Normal zone,其他含义类似。

注意1,有几项是Normal特有的,比如kernel_stack, pagetables, free_cma, slab_reclaimable, slab_unreclaimable,是因为normal zone的页面是直接映射,这些页面是供内核中使用的。

对于highmem,主要用来匿名映射,文件映射,mapped,以及共享内存。


2.2.4

[html]  view plain copy
  1. <4>[12345.679437] Normal: 1165*4kB (MRC) 1122*8kB (RC) 1119*16kB (RC) 1118*32kB (C) 1068*64kB (RC)   
  2. 748*128kB (C) 0*256kB 0*512kB 0*1024kB 1*2048kB (R) 0*4096kB 0*8192kB = 233460kB  
  3. <4>[12345.695797] HighMem: 99*4kB (M) 1148*8kB (UM) 1314*16kB (UM) 880*32kB (UM) 327*64kB (M)   
  4. 87*128kB (M) 34*256kB (M) 38*512kB (M) 12*1024kB (M) 10*2048kB (M) 3*4096kB (M) 91*8192kB (UMR) = 909516kB  
buddy系统信息信息, order范围0~11

M表示 moveable

R表示 Reserve

C表示 CMA

U表示 unmovable

E表示 reclaimable

1. 仅有 (C),表示这个freelist只能分配给带有ALLOC_CMA标志的分配

2. Highmem没有C标记,这是因为连续内存分配只发生在Normal zone中

3. MRC,表示这个freelist既有CMA内存,Reserve内存还有Movable内存


3 Who triggered OOM

有几个因素影响OOM的发生

1. 分配的order大小,以及系统对待order的方式

2. 分配发生在哪个zone

3. Zone的水印大小

4. 内存碎片化程度

5. 据说不停的分配地址空间,也会导致OOM的发生(还没验证过)


对于上面的OOM信息,我们可以看到系统内有很大的空闲空间:233460KB,但是OOM仍然发生了。

首先分配的order为0,所以和碎片化是无关的,gfp_mask=0x800d0说明分配发生在Normal分区,并且类型为Reclaimable,Reclaimable也就意味着无法从CMA分配内存。

既然不是order过大导致分配失败,那么就是free空间小于内存水印min导致了OOM killer。

[html]  view plain copy
  1. static bool __zone_watermark_ok(struct zone *z, unsigned int order,  
  2.             unsigned long mark, int classzone_idx, int alloc_flags,  
  3.             long free_pages)  
  4. {   
  5.      ...  
  6.   
  7. #ifdef CONFIG_CMA  
  8.     /* If allocation can't use CMA areas don't use free CMA pages */  
  9.     if (!(alloc_flags & ALLOC_CMA))  
  10.         free_cma = zone_page_state(z, NR_FREE_CMA_PAGES);  
  11. #endif  
  12.   
  13.     if (free_pages - free_cma <= min + z->lowmem_reserve[classzone_idx])  
  14.         return false;  
  15.     ...  
  16. }   
分配类型为Reclaimable,导致free空间必须减去CMA空闲空间233460KB - 223116kB = 2352KB,小于min 水印,系统启动OOM killer

这篇关于Out of memory, OOM killer输出信息分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007318

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

ORACLE 、达梦 数据库查询指定库指定表的索引信息

在Oracle数据库中,索引是一种关键的性能优化工具,通过它可以加快数据检索速度。在本文中,我们将深入探讨如何详细查询指定表的索引信息,以及如何利用系统视图和SQL查询来获取这些信息。 索引在数据库中的重要性 索引是一种数据结构,用于加快数据库表中数据的检索速度。它类似于书籍的目录,可以帮助数据库引擎快速定位数据行,特别是在大型数据集合下,其作用尤为显著。 查询指定表的索引信息 在Orac

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste