我的应用程序被oom-killer杀死.它是Ubuntu 11.10在没有交换的现场USB上运行,而且PC有1 Gig的RAM.运行的唯一应用程序(除了所有内置的Ubuntu东西)是我的程序flasherav.请注意/ tmp是内存映射的,并且在崩溃时有大约200MB的文件(因此占用了大约200MB的RAM).
我试图理解如何分析om-killer日志,这样我就可以理解所有内存的使用位置 - 也就是那些不同的块会加起来~1 gig导致oom-killer踢在?一旦我理解了这一点,我就可以努力减少罪犯的使用,以便应用程序可以在1 GB内存的计算机上运行.我的具体问题是.
为了分析这种情况,我总结了"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
[11686.040519] [<c1001c24>] ? __switch_to+0x94/0x1a0
[11686.040525] [<c10fb5ee>] __do_fault+0x3e/0x4b0
[11686.040530] [<c1069971>] ? enqueue_hrtimer+0x21/0x80
[11686.040535] [<c10fec2c>] handle_pte_fault+0xec/0x220
[11686.040540] [<c10fee68>] handle_mm_fault+0x108/0x210
[11686.040546] [<c152fa00>] ? vmalloc_fault+0xee/0xee
[11686.040551] [<c152fb5b>] do_page_fault+0x15b/0x4a0 …Run Code Online (Sandbox Code Playgroud)