Linuxoom-killerのログを理解する
私のアプリはoom-killerによって殺されました。これは、スワップなしのライブUSBで実行されているUbuntu 11.10であり、PCには1ギガバイトのRAMが搭載されています。実行されている唯一のアプリ(Ubuntuに組み込まれているものを除く)は、私のプログラムflasheravです。/ tmpはメモリマップされており、クラッシュ時に約200MBのファイルが含まれていたことに注意してください(したがって、最大200MBのRAMを使用していました)。 om-killerログを分析して、すべてのメモリがどこで使用されているかを正確に理解できるようにする方法を理解しようとしています。つまり、合計で最大1ギガになり、oom-killerキックが発生するさまざまなチャンクは何ですか。に?それを理解したら、1 GBのRAMを搭載したマシンでアプリが実行されるように、違反者の使用量を減らすことに取り組むことができます。私の具体的な質問はです。 状況を分析するために、「total_vm」列を合計すると、609342KBしか得られません(/ tmpの200MBに追加しても、まだ809MBです)。「total_vm」列が何であるかについて間違っているかもしれません-割り当てられているが使用されていないメモリと共有メモリが含まれていますか。はいの場合、実際に使用されているメモリを大幅に誇張するべきではありません(したがって、メモリが不足するべきではありません)。以下のリストに記載されていない、使用中の他のメモリチャンクはありますか? [11686.040460] flasherav invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0 [11686.040467] flasherav cpuset=/ mems_allowed=0 [11686.040472] Pid: 2859, comm: flasherav Not tainted 3.0.0-12-generic #20-Ubuntu [11686.040476] Call Trace: [11686.040488] [<c10e1c15>] dump_header.isra.7+0x85/0xc0 [11686.040493] [<c10e1e6c>] oom_kill_process+0x5c/0x80 [11686.040498] [<c10e225f>] out_of_memory+0xbf/0x1d0 [11686.040503] [<c10e6123>] __alloc_pages_nodemask+0x6c3/0x6e0 [11686.040509] [<c10e78d3>] ? __do_page_cache_readahead+0xe3/0x170 [11686.040514] [<c10e0fc8>] filemap_fault+0x218/0x390 …