相关疑难解决方法(0)

了解Linux oom-killer的日志

我的应用程序被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)

linux memory out-of-memory

75
推荐指数
4
解决办法
9万
查看次数

标签 统计

linux ×1

memory ×1

out-of-memory ×1