Linux oom 似乎不恰当地终止了一个进程 - 我可能遗漏了什么?

Linux oom 似乎不恰当地终止了一个进程 - 我可能遗漏了什么?

我们正在努力运行 Linux 服务器,但看起来还不错,6 GiB RAM 中内核认为分配 1.6 GiB 到缓存是合适的,我们有 9.9 GiB 的可用交换空间。当我们用完内存时,内核 oom 决定终止数据库服务器,而不是释放缓存或交换出进程。我们将 swappiness 设置为 0(较长的对话)。我们还有 1.7 GiB 数据库服务器内存固定在 RAM 中,大概是分配在大的连续块中。

虽然将备用 RAM 用于缓存是件好事,但我们更希望在服务器瘫痪之前将其释放给应用程序。我们感到非常意外。

任何预测和管理此问题的帮助(除了向系统添加 RAM 之外)都将不胜感激!(我们的直接反应是减少交换,导致可用内存增加、缓存分配相同,以及伴随的交换 IO 和 CPU WaitIO 增加。在用户等待交换时有可用内存似乎很浪费,但这比死机系统要好。)

相关统计数据。

萨里 -s 15:00:00 -e 16:00:00
Linux 2.6.32-358.2.1.el6.x86_64(系统)04/23/2014 _x86_64_(3 CPU)

下午 3:00:02 CPU %用户%nice%系统%iowait%steal%idle
下午 03:10:01 全部 17.90 0.00 35.27 3.29 0.12 43.42
下午 03:20:02 全部 19.94 0.00 36.40 8.73 0.12 34.82
下午 03:30:02 全部 20.18 0.00 42.10 20.37 0.16 17.19
下午 03:40:01 全部 5.75 0.00 19.93 5.05 0.06 69.20
下午 03:50:01 全部 22.21 0.00 34.31 8.72 0.16 34.59
平均:全部 17.17 0.00 33.58 9.23 0.12 39.90

萨里 -s 15:00:00 -e 16:00:00
Linux 2.6.32-358.2.1.el6.x86_64(系统)04/23/2014 _x86_64_(3 CPU)

下午 3:00:02 CPU %用户%nice%系统%iowait%steal%idle
下午 03:10:01 全部 17.90 0.00 35.27 3.29 0.12 43.42
下午 03:20:02 全部 19.94 0.00 36.40 8.73 0.12 34.82
下午 03:30:02 全部 20.18 0.00 42.10 20.37 0.16 17.19
下午 03:40:01 全部 5.75 0.00 19.93 5.05 0.06 69.20
下午 03:50:01 全部 22.21 0.00 34.31 8.72 0.16 34.59
平均:全部 17.17 0.00 33.58 9.23 0.12 39.90

萨里 -r -s 15:00:00 -e 16:00:00
Linux 2.6.32-358.2.1.el6.x86_64(系统)04/23/2014 _x86_64_(3 CPU)

下午 3:00:02 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %提交
下午 03:10:01 125396 5843216 97.90 22160 1989352 23282984 141.51
下午 03:20:02 44788 5923824 99.25 19092 1759124 23759172 144.40
下午 03:30:02 34400 5934212 99.42 11864 1649488 23856192 144.99
下午 03:40:01 4139748 1828864 30.64 22972 341264 9558784 58.10
下午 03:50:01 1364632 4603980 77.14 30784 2576044 11827612 71.88
平均值:1141793 4826819 80.87 21374 1663054 18456949 112.18

萨里 -R -s 15:00:00 -e 16:00:00
Linux 2.6.32-358.2.1.el6.x86_64(系统)04/23/2014 _x86_64_(3 CPU)

下午 3:00:02 frmpg/s bufpg/s campg/s
下午 3:10:01 -24.49 -0.54 26.00
下午 3:20:02 -34.14 -1.30 -97.51
下午 3:30:02 -4.43 -3.08 -46.70
下午 03:40:01 1732.71 4.69 -552.15
下午 03:50:01 -1188.87 3.35 957.39
平均值:100.36 0.62 55.05

萨里 -S -s 15:00:00 -e 16:00:00
Linux 2.6.32-358.2.1.el6.x86_64(系统)04/23/2014 _x86_64_(3 CPU)

下午 3:00:02 kbswpfree kbswpused %swpused kbswpcad %swpcad
下午 03:10:01 10471148 13892 0.13 4300 30.95
下午 03:20:02 10471148 13892 0.13 4300 30.95
下午 03:30:02 10471148 13892 0.13 4300 30.95
下午 03:40:01 10475820 9220 0.09 3484 37.79
下午 03:50:01 10475820 9220 0.09 3484 37.79
平均值:10473017 12023 0.11 3973 33.04

和内核日志

4 月 23 日 15:31:01 内核:proc_count 调用 oom-killer:gfp_mask=0xd0、order=1、oom_adj=0、oom_score_adj=0
4月23日 15:31:01 内核:proc_count cpuset=/mems_allowed=0
4 月 23 日 15:31:01 内核:Pid:1713,通信:proc_count 未受污染 2.6.32-358.2.1.el6.x86_64 #1
4月23日 15:31:01 内核:调用跟踪:
4月23日 15:31:01 内核:[] ?cpuset_print_task_mems_allowed+0x91/0xb0
4月23日 15:31:01 内核:[] ? dump_header+0x90/0x1b0
4月23日 15:31:01 内核:[] ? oom_kill_process+0x82/0x2a0
4月23日 15:31:01 内核:[] ? select_bad_process+0xe1/0x120
4月23日 15:31:01 内核:[] ? out_of_memory+0x220/0x3c0
4月23日 15:31:01 内核:[] ? __alloc_pages_nodemask+0x8ac/0x8d0
4月23日 15:31:01 内核:[] ? xen_force_evtchn_callback+0xd/0x10
4月23日 15:31:01 内核:[] ? alloc_pages_current+0xaa/0x110
4月23日 15:31:01 内核:[] ? __get_free_pages+0xe/0x50
4月23日 15:31:01 内核:[] ?copy_process+0xe4/0x1450
4月23日 15:31:01 内核:[] ? kmem_cache_alloc+0x182/0x190
4月23日 15:31:01 内核:[] ? do_fork+0x94/0x460
4月23日 15:31:01 内核:[] ? alloc_fd+0x92/0x160
4月23日 15:31:01 内核:[] ? fd_install+0x47/0x90
4月23日 15:31:01 内核:[] ? _spin_lock_irq+0x10/0x40
4月23日 15:31:01 内核:[] ? sys_clone+0x28/0x30
4月23日 15:31:01 内核:[] ?stub_clone+0x13/0x20
4月23日 15:31:01 内核:[] ? system_call_fastpath+0x16/0x1b
4月23日 15:31:01 内核:Mem-Info:
4月23日 15:31:01 内核:节点 0 每个 CPU 的 DMA:
4月23日 15:31:01 内核:CPU 0:hi:0,btch:1 美元:0
4月23日 15:31:01 内核:CPU 1:hi:0,btch:1 美元:0
4月23日 15:31:01 内核:CPU 2:hi:0,btch:1 美元:0
4月23日 15:31:01 内核:节点 0 DMA32 每 CPU:
4月23日 15:31:01 内核:CPU 0:hi:186,btch:31 美元:29
4月23日 15:31:01 内核:CPU 1:hi:186,btch:31 美元:0
4月23日 15:31:01 内核:CPU 2:hi:186,btch:31 美元:0
4月23日 15:31:01 内核:节点 0 每个 CPU 正常:
4月23日 15:31:01 内核:CPU 0:hi:186,btch:31 美元:58
4月23日 15:31:01 内核:CPU 1:hi:186,btch:31 美元:0
4月23日 15:31:01 内核:CPU 2:hi:186,btch:31 美元:0
4月23日 15:31:01 内核:active_anon:657282 inactive_anon:234243isolated_anon:0
4月23日 15:31:01 内核:active_file:1582 inactive_file:1577 independent_file:0
4月23日 15:31:01 内核:不可驱逐:415617 脏:0 写回:4 不稳定:0
4月23日 15:31:01 内核:free:7393 slab_reclaimable:13322 slab_unreclaimable:36105
4月23日 15:31:01 内核:映射:410321 shmem:409696 页表:86995 跳出:0
4 月 23 日 15:31:01 内核:节点 0 DMA 空闲:7760kB 最小:12kB 低:12kB 高:16kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB 隔离(匿名):0kB 隔离(文件):0kB 存在:7756kB mlocked:0kB dirty:0kB writeback:0kB 映射:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB 不稳定:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable?是
4月23日 15:31:01 内核:lowmem_reserve[]:0 4024 6044 6044
4 月 23 日 15:31:01 内核:节点 0 DMA32 可用:17736kB 最小:6620kB 低:8272kB 高:9928kB active_anon:2256636kB inactive_anon:564276kB active_file:2088kB inactive_file:2180kB unevictable:624700kB 隔离(匿名):0kB 隔离(文件):0kB 存在:4120800kB mlocked:0kB 脏:0kB 写回:16kB 映射:624832kB shmem:624832kB slab_reclaimable:32124kB slab_unreclaimable:90036kB kernel_stack:32696kB 页表:206100kB 不稳定:0kB 反弹:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable?否
4月23日 15:31:01 内核:lowmem_reserve[]: 0 0 2020 2020
4月23日 15:31:01 内核:节点 0 正常 空闲:4076kB 最小:3320kB 低:4148kB 高:4980kB active_anon:372492kB inactive_anon:372696kB active_file:4240kB inactive_file:4128kB 不可驱逐:1037768kB 隔离(匿名):0kB 隔离(文件):0kB 存在:2068480kB mlocked:24776kB 脏:0kB 写回:0kB 映射:1016452kB shmem:1013952kB slab_reclaimable:21164kB slab_unreclaimable:54384kB kernel_stack:4328kB 页表:141880kB 不稳定:0kB 反弹:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable?否
4月23日 15:31:01 内核:lowmem_reserve[]:0 0 0 0
4月23日 15:31:01 内核:节点 0 DMA:2*4kB 1*8kB 2*16kB 1*32kB 0*64kB 2*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 1*4096kB = 7760kB
4月23日 15:31:01 内核:节点 0 DMA32:4083*4kB 12*8kB 4*16kB 3*32kB 2*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 17740kB
4月23日 15:31:01 内核:节点 0 正常:615*4kB 11*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 4132kB
4月23日 15:31:01 内核:页面缓存页面总数为414562
4 月 23 日 15:31:01 内核:交换缓存中有 1075 个页面
4月23日 15:31:01 内核:交换缓存统计信息:添加 22900328,删除 22899253,查找 492200942/494634739
4月23日 15:31:01 内核:可用交换空间 = 10471148kB
4月23日 15:31:01 内核:总交换空间 = 10485040kB
4月23日 15:31:01 内核:1572863 页 RAM
4月23日 15:31:01 内核:保留80710页
4月23日 15:31:01 内核:共享了2926057个页面
4月23日 15:31:01 内核:1058807 个页面未共享
4月23日 15:31:01 内核:[pid]uid tgid total_vm rss cpu oom_adj oom_score_adj 名称

跳过冗长的流程列表

4 月 23 日 15:31:01 内核:内存不足:终止进程 1357 (oninit) 得分 99 或牺牲子进程
4 月 23 日 15:31:01 内核:已终止进程 1359,UID 501,(oninit)total-vm:2056000kB,anon-rss:116kB,file-rss:10132kB
4 月 23 日 15:31:20 内核:awk 调用 oom-killer:gfp_mask=0x201da、order=0、oom_adj=0、oom_score_adj=0
4月23日 15:31:20 内核:awk cpuset=/mems_allowed=0
4 月 23 日 15:31:20 内核:Pid:22899,通信:awk 未受污染 2.6.32-358.2.1.el6.x86_64 #1
4月23日 15:31:20 内核:调用跟踪:
4月23日 15:31:20 内核:[] ?cpuset_print_task_mems_allowed+0x91/0xb0
4月23日 15:31:20 内核:[] ? dump_header+0x90/0x1b0
4月23日 15:31:20 内核:[] ? oom_kill_process+0x82/0x2a0
4月23日 15:31:20 内核:[] ? select_bad_process+0xe1/0x120
4月23日 15:31:20 内核:[] ? out_of_memory+0x220/0x3c0
4月23日 15:31:20 内核:[] ? __alloc_pages_nodemask+0x8ac/0x8d0
4月23日 15:31:20 内核:[] ? alloc_pages_current+0xaa/0x110
4月23日 15:31:20 内核:[] ? __page_cache_alloc+0x87/0x90
4月23日 15:31:20 内核:[] ? find_get_page+0x1e/0xa0
4月23日 15:31:20 内核:[] ? filemap_fault+0x1a7/0x500
4月23日 15:31:20 内核:[] ? xen_set_pte_at+0xaf/0x170
4月23日 15:31:20 内核:[] ? __do_fault+0x54/0x530
4月23日 15:31:20 内核:[] ? handle_pte_fault+0xf7/0xb50
4 月 23 日 15:31:20 内核:[] ? retint_restore_args+0x5/0x6
4月23日 15:31:20 内核:[] ? xen_hypervisor_callback+0x1b/0x20
4月23日 15:31:20 内核:[] ? error_exit+0x2a/0x60
4 月 23 日 15:31:20 内核:[] ? retint_restore_args+0x5/0x6
4月23日 15:31:20 内核:[] ? xen_hypervisor_callback+0x1b/0x20
4月23日 15:31:20 内核:[]? __raw_callee_save_xen_pmd_val+0x11/0x1e
4月23日 15:31:20 内核:[] ? handle_mm_fault+0x23a/0x310
4 月 23 日 15:31:20 内核:[] ? __do_page_fault+0x139/0x480
4月23日 15:31:20 内核:[] ? xen_force_evtchn_callback+0xd/0x10
4月23日 15:31:20 内核:[] ? check_events+0x12/0x20
4月23日 15:31:20 内核:[] ? xen_force_evtchn_callback+0xd/0x10
4月23日 15:31:20 内核:[] ? check_events+0x12/0x20
4月23日 15:31:20 内核:[] ? do_page_fault+0x3e/0xa0
4月23日 15:31:20 内核:[] ? page_fault+0x25/0x30
4月23日 15:31:20 内核:Mem-Info:
4月23日 15:31:20 内核:节点 0 每个 CPU 的 DMA:
4月23日 15:31:20 内核:CPU 0:hi:0,btch:1 美元:0
4月23日 15:31:20 内核:CPU 1:hi:0,btch:1 美元:0
4月23日 15:31:20 内核:CPU 2:hi:0,btch:1 美元:0
4月23日 15:31:20 内核:节点 0 DMA32 每 CPU:
4月23日 15:31:20 内核:CPU 0:hi:186,btch:31 美元:32
4月23日 15:31:20 内核:CPU 1:hi:186,btch:31 美元:0
4月23日 15:31:20 内核:CPU 2:hi:186,btch:31 美元:0
4月23日 15:31:20 内核:节点 0 每个 CPU 正常:
4月23日 15:31:20 内核:CPU 0:hi:186,btch:31 美元:90
4月23日 15:31:20 内核:CPU 1:hi:186,btch:31 美元:0
4月23日 15:31:20 内核:CPU 2:hi:186,btch:31 美元:0
4月23日 15:31:20 内核:active_anon:659392 inactive_anon:234908isolated_anon:0
4月23日 15:31:20 内核:active_file:1093 inactive_file:1129 independent_file:0
4月23日 15:31:20 内核:不可驱逐:415617 脏:0 写回:0 不稳定:0
4月23日 15:31:20 内核:空闲:6348 slab_reclaimable:11215 slab_unreclaimable:36129
4月23日 15:31:20 内核:映射:410358 shmem:409696 页表:86756 反弹:0
4 月 23 日 15:31:20 内核:节点 0 DMA 可用:7760kB 最小:12kB 低:12kB 高:16kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB 隔离(匿名):0kB 隔离(文件):0kB 存在:7756kB mlocked:0kB dirty:0kB writeback:0kB 映射:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB 不稳定:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable?是
4月23日 15:31:20 内核:lowmem_reserve[]:0 4024 6044 6044
4 月 23 日 15:31:20 内核:节点 0 DMA32 可用:14596kB 最小:6620kB 低:8272kB 高:9928kB active_anon:2264272kB inactive_anon:566132kB active_file:1476kB inactive_file:1444kB unevictable:624700kB 隔离(匿名):0kB 隔离(文件):0kB 存在:4120800kB mlocked:0kB 脏:0kB 写回:0kB 映射:624944kB shmem:624832kB slab_reclaimable:24184kB slab_unreclaimable:89940kB kernel_stack:32688kB 页表:206172kB 不稳定:0kB 反弹:0kB writeback_tmp:0kB pages_scanned:1620 all_unreclaimable?否
4月23日 15:31:20 内核:lowmem_reserve[]: 0 0 2020 2020
4 月 23 日 15:31:20 内核:节点 0 正常 空闲:3036kB 最小:3320kB 低:4148kB 高:4980kB active_anon:373296kB inactive_anon:373500kB active_file:2896kB inactive_file:3072kB 不可驱逐:1037768kB 隔离(匿名):0kB 隔离(文件):2568kB 存在:2068480kB mlocked:24776kB 脏:0kB 写回:0kB 映射:1016488kB shmem:1013952kB slab_reclaimable:20676kB slab_unreclaimable:54576kB kernel_stack:4368kB 页表:140852kB 不稳定:0kB 反弹:0kB writeback_tmp:0kB pages_scanned:9666 all_unreclaimable?否
4月23日 15:31:20 内核:lowmem_reserve[]:0 0 0 0
4月23日 15:31:20 内核:节点 0 DMA:2*4kB 1*8kB 2*16kB 1*32kB 0*64kB 2*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 1*4096kB = 7760kB
4月23日 15:31:20 内核:节点 0 DMA32:3297*4kB 12*8kB 4*16kB 3*32kB 2*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 14596kB
4月23日 15:31:20 内核:节点 0 正常:356*4kB 1*8kB 0*16kB 1*32kB 0*64kB 0*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 3000kB
4月23日 15:31:20 内核:页面缓存页面总数为414714
4 月 23 日 15:31:20 内核:交换缓存中有 1097 个页面
4 月 23 日 15:31:20 内核:交换缓存统计信息:添加 22900397,删除 22899300,查找 492200999/494634809
4月23日 15:31:20 内核:可用交换空间 = 10471368kB
4月23日 15:31:20 内核:总交换空间 = 10485040kB
4月23日 15:31:20 内核:1572863 页 RAM
4月23日 15:31:20 内核:保留80710页
4月23日 15:31:20 内核:共享了2926158个页面
4月23日 15:31:20 内核:1059316 个页面未共享
4月23日 15:31:20 内核:[pid]uid tgid total_vm rss cpu oom_adj oom_score_adj 名称

再次跳过冗长的流程列表

4 月 23 日 15:31:20 内核:内存不足:终止进程 1357 (oninit) 得分 99 或牺牲子进程
4 月 23 日 15:31:20 内核:已终止进程 1357,UID 501,(oninit)total-vm:2056000kB,anon-rss:648kB,file-rss:1637852kB

答案1

我强烈怀疑这是由于内存过度提交. Linux 工具集通常不会跟踪此情况:

当前过量提交限制和提交的数量可在 /proc/meminfo 中分别作为 CommitLimit 和 Committed_AS 查看。

当这种情况发生时,即使有大量未使用的内存,内核的启发式方法通常也会导致它选择要终止的数据库服务器(因为其内存分配很大)。

我们必须为我们的 collectd 监控开发一个插件才能看到它的实际效果。

我们的系统运行一个 Java 进程,该进程存在内存泄漏,但由于内存从未实际使用过,因此正常监控中未显示该泄漏。因此,我们没有看到内存使用量增长;但是,我们确实看到内存提交量增长。我们现在相信这是问题的根本原因。

我在网上看到过对 java 应用程序/数据库服务器中此问题的提及,其中大量与数据库服务器一起运行的 java 应用程序可能会导致同样的问题(高过量提交,随后内核杀死数据库服务器)。

相关内容