oom-killer를 디코딩하여 조각 찾기

oom-killer를 디코딩하여 조각 찾기

이는 복구 가능한 메모리가 많은 59GB RAM 시스템이므로 OOM-Kills가 발생합니다. 이 사람은 매우 고집이 세다.

kthreadd invoked oom-killer: gfp_mask=0x26080c0, order=2, oom_score_adj=0
kthreadd cpuset=/ mems_allowed=0
CPU: 3 PID: 2 Comm: kthreadd Not tainted 4.4.0-1083-aws #93-Ubuntu
Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
 0000000000000286 ecc5681d66b270c1 ffff880f7b54fad0 ffffffff81407501
 ffff880f7b54fc88 ffff88010f19e040 ffff880f7b54fb40 ffffffff81214a0a
 0000000000000000 ffff880f7884ea80 ffff8804fa62a940 ffff880f7b54fb28
Call Trace:
 [<ffffffff81407501>] dump_stack+0x63/0x82
 [<ffffffff81214a0a>] dump_header+0x5a/0x1c3
 [<ffffffff8139e754>] ? apparmor_capable+0xc4/0x1b0
 [<ffffffff81198f7b>] oom_kill_process+0x20b/0x3d0
 [<ffffffff811993a9>] out_of_memory+0x219/0x460
 [<ffffffff8119f3c3>] __alloc_pages_slowpath.constprop.88+0x943/0xaf0
 [<ffffffff8119f7f8>] __alloc_pages_nodemask+0x288/0x2a0
 [<ffffffff810b803d>] ? attach_task_cfs_rq+0x3d/0x80
 [<ffffffff810a5220>] ? kthread_create_on_node+0x1e0/0x1e0
 [<ffffffff8119f8ab>] alloc_kmem_pages_node+0x4b/0xc0
 [<ffffffff810a5220>] ? kthread_create_on_node+0x1e0/0x1e0
 [<ffffffff81081ab9>] copy_process+0x1d9/0x1c30
 [<ffffffff8183c201>] ? __schedule+0x301/0x810
 [<ffffffff8183c20d>] ? __schedule+0x30d/0x810
 [<ffffffff8183c201>] ? __schedule+0x301/0x810
 [<ffffffff8183c20d>] ? __schedule+0x30d/0x810
 [<ffffffff810836a0>] _do_fork+0x80/0x360
 [<ffffffff8183c241>] ? __schedule+0x341/0x810
 [<ffffffff810839a9>] kernel_thread+0x29/0x30
 [<ffffffff810a5ce8>] kthreadd+0x148/0x190
 [<ffffffff810a5ba0>] ? kthread_create_on_cpu+0x60/0x60
 [<ffffffff81841565>] ret_from_fork+0x55/0x80
 [<ffffffff810a5ba0>] ? kthread_create_on_cpu+0x60/0x60
Mem-Info:
active_anon:6852345 inactive_anon:67572 isolated_anon:0
 active_file:4085952 inactive_file:4062216 isolated_file:32
 unevictable:913 dirty:54748 writeback:25758 unstable:0
 slab_reclaimable:434984 slab_unreclaimable:13452
 mapped:2572311 shmem:164039 pagetables:50287 bounce:0
 free:84572 free_pcp:8 free_cma:0
Node 0 DMA free:15900kB min:16kB low:20kB high:24kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15988kB managed:15900kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
lowmem_reserve[]: 0 1953 61390 61390 61390
Node 0 DMA32 free:255200kB min:2132kB low:2664kB high:3196kB active_anon:1722736kB inactive_anon:0kB active_file:4kB inactive_file:4kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:2080768kB managed:2000228kB mlocked:0kB dirty:0kB writeback:0kB mapped:8kB shmem:0kB slab_reclaimable:16304kB slab_unreclaimable:1292kB kernel_stack:128kB pagetables:3640kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 59437 59437 59437
Node 0 Normal free:67188kB min:65432kB low:81788kB high:98148kB active_anon:25686644kB inactive_anon:270288kB active_file:16343804kB inactive_file:16248860kB unevictable:3652kB isolated(anon):0kB isolated(file):128kB present:61865984kB managed:60863752kB mlocked:3652kB dirty:218992kB writeback:103032kB mapped:10289236kB shmem:656156kB slab_reclaimable:1723632kB slab_unreclaimable:52516kB kernel_stack:7104kB pagetables:197508kB unstable:0kB bounce:0kB free_pcp:36kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:6116 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0 0
Node 0 DMA: 1*4kB (U) 1*8kB (U) 1*16kB (U) 0*32kB 2*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15900kB
Node 0 DMA32: 688*4kB (ME) 522*8kB (UME) 401*16kB (UME) 256*32kB (UM) 147*64kB (UM) 68*128kB (UME) 34*256kB (UME) 18*512kB (UM) 11*1024kB (UME) 7*2048kB (UME) 42*4096kB (M) = 255200kB
Node 0 Normal: 16723*4kB (UMEH) 2*8kB (H) 1*16kB (H) 4*32kB (H) 4*64kB (H) 1*128kB (H) 2*256kB (H) 1*512kB (H) 0*1024kB 0*2048kB 0*4096kB = 68460kB
Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
8312802 total pagecache pages
0 pages in swap cache
Swap cache stats: add 0, delete 0, find 0/0
Free swap  = 0kB
Total swap = 0kB
15990685 pages RAM
0 pages HighMem/MovableOnly
270715 pages reserved
0 pages cma reserved
0 pages hwpoisoned
[ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name
[  450]     0   450    36775    25135      75       3        0             0 systemd-journal
[  493]     0   493    25742       45      17       4        0             0 lvmetad
[  522]     0   522    10921     1129      22       3        0         -1000 systemd-udevd
[ 1112]     0  1112     4030      709      11       3        0             0 dhclient
[ 1260]     0  1260     1099      296       8       3        0             0 acpid
[ 1264]     0  1264    68648      596      36       4        0             0 accounts-daemon
[ 1266]     0  1266     1305       28       8       3        0             0 iscsid
[ 1267]     0  1267     1430      877       9       3        0           -17 iscsid
[ 1280]   107  1280    10757      327      25       3        0          -900 dbus-daemon
[ 1291]     0  1291    77264      529      20       3        0             0 lxcfs
[ 1293]     0  1293     6511      396      19       3        0             0 atd
[ 1295]   104  1295    65157     1015      29       4        0             0 rsyslogd
[ 1303]     0  1303     5024      268      14       3        0             0 systemd-logind
[ 1305]     0  1305     6932      506      18       3        0             0 cron
[ 1307]     0  1307   231489     3444      53       6        0             0 amazon-ssm-agen
[ 1344]     0  1344    69278      683      38       4        0             0 polkitd
[ 1406]     0  1406     3343       36      11       3        0             0 mdadm
[ 1468]     0  1468    16378      441      36       3        0         -1000 sshd
[ 1497]     0  1497     4901      283      14       3        0             0 irqbalance
[ 1509]   112  1509    27509      459      26       4        0             0 ntpd
[ 1519]     0  1519     9672      634      23       3        0             0 monit
[ 1637]     0  1637   233876     7156      63      25        0             0 node
[ 3023]     0  3023  1475808   143142     402       9        0             0 java
[ 3117]     0  3117   193826      912      43       4        0             0 collectd
[ 3328]     0  3328     3664      343      11       3        0             0 agetty
[ 3329]     0  3329     3618      392      12       3        0             0 agetty
[ 7107]   114  7107 249623716  9115398   48941     947        0             0 java
[20376]     0 20376   314931    18408     124      34        0             0 node
[20400]     0 20400    36161     1469      50       5        0             0 tsauditd
[20492]     0 20492    77044     8287      52       3        0             0 tsfim
[29823]     0 29823   199481     6601      54       6        0          -900 snapd
Out of memory: Kill process 7107 (java) score 583 or sacrifice child
Killed process 7107 (java) total-vm:998494864kB, anon-rss:26292036kB, file-rss:10168536kB

gfp_mask=0x26080c0 다음과 같이 디코딩됨:

  • 2: GFP_KSWAPD_RECLAIM
  • 6: GFP_DIRECT_RECLAIM + GFP_NOTRACK
  • 0:
  • 8: GFP_ZERO
  • 0:
  • C: GFP_FS + GFP_IO
  • 0: 메모리 영역이 정상입니다.

이는 할당 문제가 일반 메모리 영역에 있으며 DMA 또는 DMA32를 볼 필요가 없음을 알려줍니다. 매우 좋은. 두 개의 회수 플래그가 사용되며, 이 플래그는 메모리 할당자에게 이 요청을 충족하기 위해 메모리를 계속 회수하도록 지시해야 합니다. GFP_FS 및 GFP_IO는 이 특정 요청이 mmap일 수 있다고 제안할 수 있지만 알 수는 없습니다.

전반적으로 Mem-Info시스템의 active_anon 메모리(active_anon:6852345)는 약 26GB이며, 또 다른 32GB의 활성 및 비활성 캐시(각각 active_file:4085952 및 inactive_file:4062216)를 회수할 수 있어야 합니다. 표면적으로는 작업할 수 있는 메모리가 충분해 보이지만 여전히 큰 문제를 해결했습니다. 그래서 우리는 조각화 문제에 직면할 수 있습니다.

지역 정보 보기...

Node 0 Normal
free:67188kB min:65432kB low:81788kB high:98148kB
active_anon:25686644kB inactive_anon:270288kB
active_file:16343804kB inactive_file:16248860kB
unevictable:3652kB isolated(anon):0kB isolated(file):128kB
present:61865984kB managed:60863752kB mlocked:3652kB
dirty:218992kB writeback:103032kB mapped:10289236kB shmem:656156kB
slab_reclaimable:1723632kB slab_unreclaimable:52516kB
kernel_stack:7104kB pagetables:197508kB unstable:0kB
bounce:0kB free_pcp:36kB local_pcp:0kB free_cma:0kB
writeback_tmp:0kB pages_scanned:6116
all_unreclaimable? no

우리가 얻은 숫자는 최상위 Mem-Info 숫자와 매우 유사했습니다. 이것은 예상됩니다. DMA32 영역에는 일부 용도가 있지만 일반 영역보다 훨씬 작습니다.

일반 페이지 크기 정보 보기...

Node 0 Normal:
16723*4kB (UMEH)
2*8kB (H)
1*16kB (H)
4*32kB (H)
4*64kB (H)
1*128kB (H)
2*256kB (H)
1*512kB (H)
0*1024kB 0*2048kB 0*4096kB
= 68460kB

(UMEH 문자 디코딩) 내 단서가 여기에 있을 것 같지만 보이지 않습니다. 거의 모든 메모리 사용량이 4kB 버킷에 있으며 이는 조각화를 나타냅니다. 이 경우 DMA32 버킷은 실제로 훨씬 더 큽니다. 나는 그 대사가 나에게 말하는 것을 이해하지 못하는 것 같아요.

GFP 마스크 플래그는 이것이 일종의 메모리 매핑 쓰기임을 나타냅니까?

여기서 단편화는 어디에 있습니까?

답변1

실제로 메모리가 부족합니다. 이 줄

Node 0 Normal free:67188kB min:65432kB

OOM Killer가 트리거될 때 최소 제한이 65432kB이고 시스템에 사용 가능한 RAM이 67188kB임을 나타냅니다.

또한 필요한 여유 블록(시스템에 요청한 마지막 16kB 블록)이 없기 때문에 메모리가 심각하게 조각화되어 있는 것처럼 보이며, 이로 인해 커널에서 OOM Killer를 트리거할 수 있는 또 다른 논리가 트리거됩니다. 아직 최소 RAM 미만이 아닌 경우에도 조각이 생성됩니다.

이를 방지하는 방법은 RAM 사용량을 줄이거나 스왑을 추가하는 것입니다.

늘리면 /proc/sys/vm/extfrag_threshold조각화도 줄어들 수 있지만 이미 최소 RAM 제한에 매우 가까워졌으며 OOM Killer가 실행되는 것은 시간 문제일 뿐입니다.

커널이 페이지를 재배치할 수 있도록 약간의 스왑을 추가하는 것이 좋습니다(스왑으로 1.5GB를 사용하고 zram32GB 시스템에는 일반 스왑이 0임). (내가 아는 한 할당된 모든 페이지를 스왑하지 않고는 커널이 재배치할 수 없다는 것을 알고 있음) 이 과정에서 RAM 조각화가 증가합니다.

관련 정보