-100 MB の RAM がある場合でも、ランダムな kswapd0 および OOM キラーが表示されます。私は他の同様の問題をたくさん経験しましたが、私の場合、なぜOOMキラーが実行されたのか理解できません。知識豊富な人々が洞察を共有し、私の研究の方向性を指摘できることを願っています。
編集:上記から始めて、OOMキラーがトリガされたときにこの出力を取得します。また、kswapが〜100MBを使用できる理由を知りたいです。私たちのアプリケーションには最大90個が必要で、割り当てられた容量は〜50 MBです。したがって、これが発生した場合は約40 MBだけ試してください。
top - 09:19:06 up 23:57, 0 users, load average: 4.50, 2.61, 1.87
Tasks: 101 total, 2 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.1 us, 62.5 sy, 0.0 ni, 0.0 id, 25.9 wa, 0.0 hi, 4.5 si, 0.0 st
KiB Mem : 507008 total, 99320 free, 355096 used, 52592 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 102308 avail Mem
top - 09:19:09 up 23:57, 0 users, load average: 4.50, 2.61, 1.87
Tasks: 100 total, 1 running, 98 sleeping, 0 stopped, 1 zombie
%Cpu(s): 35.8 us, 45.4 sy, 0.0 ni, 0.0 id, 17.4 wa, 0.0 hi, 1.4 si, 0.0 st
KiB Mem : 507008 total, 162280 free, 288952 used, 55776 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 168376 avail Mem
以下は私の追跡です。
2022-07-29T09:19:09.117931Z,BTL200072600123,3,0,kernel:,[86254.933997] Out of memory: Kill process 25402 (application) score 181 or sacrifice child
2022-07-29T09:19:09.117941Z,BTL200072600123,3,0,kernel:,[86254.934006] Killed process 25402 (application) total-vm:159852kB, anon-rss:75664kB, file-rss:16020kB
2022-07-29T09:19:09.095963Z,BTL200072600123,4,1,kernel:, [86254.932989] acquisition invoked oom-killer: gfp_mask=0x2084d0, order=0, oom_score_adj=0
2022-07-29T09:19:09.096076Z,BTL200072600123,4,1,kernel:, [86254.933012] CPU: 0 PID: 17939 Comm: acquisition Tainted: G O 4.1.46 #5
2022-07-29T09:19:09.096142Z,BTL200072600123,4,1,kernel:, [86254.933019] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
2022-07-29T09:19:09.096206Z,BTL200072600123,4,1,kernel:, [86254.933025] Backtrace:
2022-07-29T09:19:09.096270Z,BTL200072600123,4,1,kernel:, [86254.933054] [<800132e4>] (dump_backtrace) from [<80013500>] (show_stack+0x18/0x1c)
2022-07-29T09:19:09.096334Z,BTL200072600123,4,1,kernel:, [86254.933060] r7:00000000 r6:80a83c70 r5:600f0113 r4:00000000
202
2022-07-29T09:19:09.098354Z,BTL200072600123,4,1,kernel:, [86254.933467] Mem-Info:
2022-07-29T09:19:09.098411Z,BTL200072600123,4,1,kernel:, [86254.933485] active_anon:50599 inactive_anon:6859 isolated_anon:0
2022-07-29T09:19:09.098472Z,BTL200072600123,4,1,kernel:, [86254.933485] active_file:136 inactive_file:159 isolated_file:0
2022-07-29T09:19:09.098530Z,BTL200072600123,4,1,kernel:, [86254.933485] unevictable:16 dirty:0 writeback:0 unstable:0
2022-07-29T09:19:09.098589Z,BTL200072600123,4,1,kernel:, [86254.933485] slab_reclaimable:1089 slab_unreclaimable:2343
2022-07-29T09:19:09.098648Z,BTL200072600123,4,1,kernel:, [86254.933485] mapped:5971 shmem:8154 pagetables:534 bounce:0
2022-07-29T09:19:09.098704Z,BTL200072600123,4,1,kernel:, [86254.933485] free:23627 free_pcp:0 free_cma:23127
2022-07-29T09:19:09.098765Z,BTL200072600123,4,1,kernel:, [86254.933518] Normal free:94380kB min:1972kB low:2464kB high:2956kB active_anon:201792kB inactive_anon:27364kB active_file:476kB inactive_file:560kB unevictable:64kB isolated(anon):0kB isolated(file):0kB present:522240kB managed:505984kB mlocked:64kB dirty:0kB writeback:0kB mapped:23728kB shmem:32540kB slab_reclaimable:4356kB slab_unreclaimable:9372kB kernel_stack:1032kB pagetables:2136kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:92508kB writeback_tmp:0kB pages_scanned:6648 all_unreclaimable? yes
2022-07-29T09:19:09.098829Z,BTL200072600123,4,1,kernel:, [86254.933523] lowmem_reserve[]: 0 8 8
2022-07-29T09:19:09.098890Z,BTL200072600123,4,1,kernel:, [86254.933549] HighMem free:128kB min:128kB low:128kB high:132kB active_anon:604kB inactive_anon:72kB active_file:68kB inactive_file:76kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:1024kB managed:1024kB mlocked:0kB dirty:0kB writeback:0kB mapped:156kB shmem:76kB 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:32 all_unreclaimable? no
2022-07-29T09:19:09.098950Z,BTL200072600123,4,1,kernel:, [86254.933555] lowmem_reserve[]: 0 0 0
2022-07-29T09:19:09.099011Z,BTL200072600123,4,1,kernel:, [86254.933564] Normal: 268*4kB (UEMRC) 128*8kB (UERC) 80*16kB (UERC) 8*32kB (RC) 0*64kB 1*128kB (C) 0*256kB 1*512kB (C) 0*1024kB 4*2048kB (C) 20*4096kB (C) = 94384kB
2022-07-29T09:19:09.099068Z,BTL200072600123,4,1,kernel:, [86254.933608] HighMem: 32*4kB (U) 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 128kB
2022-07-29T09:19:09.099126Z,BTL200072600123,4,1,kernel:, [86254.933638] 8449 total pagecache pages
2022-07-29T09:19:09.099183Z,BTL200072600123,4,1,kernel:, [86254.933646] 0 pages in swap cache
2022-07-29T09:19:09.099240Z,BTL200072600123,4,1,kernel:, [86254.933652] Swap cache stats: add 0, delete 0, find 0/0
2022-07-29T09:19:09.099297Z,BTL200072600123,4,1,kernel:, [86254.933656] Free swap = 0kB
2022-07-29T09:19:09.099353Z,BTL200072600123,4,1,kernel:, [86254.933661] Total swap = 0kB
2022-07-29T09:19:09.099408Z,BTL200072600123,4,1,kernel:, [86254.933665] 130816 pages RAM
2022-07-29T09:19:09.099464Z,BTL200072600123,4,1,kernel:, [86254.933670] 256 pages HighMem/MovableOnly
2022-07-29T09:19:09.099521Z,BTL200072600123,4,1,kernel:, [86254.933675] 4294905824 pages reserved
2022-07-29T09:19:09.099578Z,BTL200072600123,4,1,kernel:, [86254.933680] 65536 pages cma reserved
答え1
数字を約加算すると、すべてが正しい位置にあるように見えます。 RAMが不足し、OOMキラーがあなたを殺します。
2022-07-29T09:19:09.098704Z,BTL200072600123,4,1,kernel:, [86254.933485] free:23627 free_pcp:0 free_cma:23127
これは、使用可能なRAMが23627kBで、systemd.resource-controlがMemoryLow
24.6MBに設定されています。
… Normal free:94380kB min:1972kB low:2464kB
まあ、うん。
私はランダムになる
kswap0
まあ、無料交換が0つあります:
Free swap = 0kB
答え2
Linuxは、実行することが期待される操作のためにプロセスに多くのRAMを割り当てることができない限り、OOMが発生するプロセスをランダムにシャットダウンしません。
数字から(匿名 RSS:75664kB)、特定のアプリケーションが多くのメモリを使用しており、そのアプリケーションが終了するようです。
2つの追加:
スワップメモリがありません(総交換量 = 0kB)
これは、メモリ不足アプリケーションがない高速サーバーに適しています。そうでない場合に備えて、スワップを追加することをお勧めします。当社のサーバーには99.9%の時間に十分なメモリがあります。ただし、バックグラウンドで何かが実行を開始し、短時間(プロセスが終了するまで)サーバーのメモリが不足します。この場合、スワッピングは99.9%の時間を節約し、ワンタイムイベントなので、狂ったように読み書きはしません。
どのプロセスが終了するかは、複雑な経験的方法です。
より多くのメモリを自動的に割り当てるプロセスにはなりません。最も多くのメモリを割り当てる可能性が高いです。正確なアルゴリズムはわかりませんが、オペレーティングシステムは、他のすべてのプロセスを円滑に実行できるように、より良い機会を提供するためにプロセスを開始します。したがって、プロセスAはを呼び出すことができ
malloc()
、プロセスBはOOMを経験できます。
大規模なサーバーに関するもう1つの注意:「ファイル」(別の「セクション」)からメモリを管理できます。私のサーバーには512 GBのRAMが2つのファイルに分割されています。プロセスが200 GB以上のRAMを使用しようとすると、メモリ不足状態が発生する可能性があります(頻繁に発生しないでください)。 2つのファイルもある場合、プロセスサイズは約64 GBに制限されます。