免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2410 | 回复: 3
打印 上一主题 下一主题

[内存管理] 这个oom输出信息哪位帮忙解释下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-02 14:03 |只看该作者 |倒序浏览
本帖最后由 Arthur_ 于 2013-05-02 15:30 编辑

zzzz: page allocation failure. order:9, mode:0x44d0
Pid: 3206, comm: zzzz Not tainted 2.6.29.6-tpn-smp #39
Call Trace:
[<c016c1a5>] __alloc_pages_internal+0x375/0x470
[<c016c301>] __get_free_pages+0x21/0x30
[<c06eb6a5>] __alloc_skb+0x55/0x110
[<c06e6de9>] sock_alloc_send_skb+0x189/0x1c0
[<c075cb0e>] unix_dgram_sendmsg+0x1fe/0x520
[<c06e3f61>] sock_sendmsg+0x111/0x130
[<c0250c9c>] journal_stop+0x13c/0x2a0
[<c013da20>] autoremove_wake_function+0x0/0x50
[<c0219214>] __ext3_journal_stop+0x24/0x50
[<c01ab460>] __mark_inode_dirty+0x30/0x180
[<c019f884>] dput+0x84/0x120
[<c06e4314>] sys_sendto+0x114/0x160
[<c075bbbb>] unix_state_double_lock+0x4b/0x60
[<c0384f6c>] security_unix_may_send+0xc/0x10
[<c075d296>] unix_dgram_connect+0x246/0x260
[<c06e3872>] sys_connect+0xd2/0xf0
[<c06e4397>] sys_send+0x37/0x40
[<c06e5609>] sys_socketcall+0x1b9/0x290
[<c01033ae>] syscall_call+0x7/0xb
[<c07a0000>] select_idle_routine+0x50/0xca
Mem-Info:
DMA per-cpu:
CPU    0: hi:    0, btch:   1 usd:   0
CPU    1: hi:    0, btch:   1 usd:   0
Normal per-cpu:
CPU    0: hi:  186, btch:  31 usd:   0
CPU    1: hi:  186, btch:  31 usd:   0
HighMem per-cpu:
CPU    0: hi:  186, btch:  31 usd:   0
CPU    1: hi:  186, btch:  31 usd:   0
Active_anon:81962 active_file:9442 inactive_anon:180941
inactive_file:122533 unevictable:0 dirty:1764 writeback:7 unstable:0
free:65703 slab:38700 mapped:3387 pagetables:532 bounce:0
DMA free:3928kB min:64kB low:80kB high:96kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB present:15804kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 865 1982 1982
Normal free:205180kB min:3728kB low:4660kB high:5592kB active_anon:142800kB inactive_anon:164100kB active_file:12608kB inactive_file:174460kB unevictable:0kB present:885944kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 558 558
HighMem free:53704kB min:512kB low:1712kB high:2916kB active_anon:185048kB inactive_anon:559664kB active_file:25160kB inactive_file:315672kB unevictable:0kB present:1143768kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 4*4kB 13*8kB 14*16kB 8*32kB 6*64kB 5*128kB 7*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 3928kB
Normal: 14578*4kB 9423*8kB 3672*16kB 199*32kB 20*64kB 14*128kB 9*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 205216kB
HighMem: 5308*4kB 1457*8kB 371*16kB 95*32kB 17*64kB 5*128kB 8*256kB 4*512kB 4*1024kB 1*2048kB 0*4096kB = 53832kB
181991 total pagecache pages
49114 pages in swap cache
Swap cache stats: add 21646079, delete 21596965, find 7061998/10422672
Free swap  = 3580524kB
Total swap = 4000176kB
515504 pages RAM
288194 pages HighMem
6862 pages reserved
146796 pages shared
299703 pages non-shared

红色我查了下 是分配一段连续2M的内存 申请失败. mode 没有搞清楚什么含义
后面的信息我大概看了下Highmem还有50M可用, 而且buddy中5308*4kB 这么多也足够2M了, 怎么就分配失败了呢?!

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
2 [报告]
发表于 2013-05-02 14:35 |只看该作者
highmem是vmalloc用的, buddy不走它;

buddy中够了, 不一定够连续2m的

论坛徽章:
0
3 [报告]
发表于 2013-05-02 15:11 |只看该作者
帅绝人寰 发表于 2013-05-02 14:35
highmem是vmalloc用的, buddy不走它;

buddy中够了, 不一定够连续2m的


看了下, 堆信息显示用的是__get_free_pages, 应该是你所得buddy分配不到连续的.

不过看你的回复我有个小疑问
>highmem是vmalloc用的, buddy不走它

不是很理解 是buddy的资源不包括Highmem部分么? 还是说vmalloc 不从buddy 分配内存?

root@:~# cat /proc/buddyinfo
Node 0, zone      DMA     26     31     32     24     18      8      1      0      0      0      0
Node 0, zone   Normal   1409     44      4      5      9      4      2      2      0      0      0
Node 0, zone  HighMem      8     12      2      1      1      0      0      0      0      0      0

论坛徽章:
0
4 [报告]
发表于 2013-05-02 17:16 |只看该作者
回复 3# Arthur_

highmem当然是buddy;
但vmalloc和alloc_pages一个最大的区别是vmalloc是一页一页分配的,但alloc_pages是按阶分配的,他们都从buddy系统分配,就是因为vmalloc和alloc_pages这个不同特性造成了vmalloc可以分配到物理非连续大块内存,这个在系统运行很长时间之后,系统中存在大量的碎片的时候对liunx的稳定和高效非常重要(因为此时内核其他的物理内存分配函数很可能失败,这个会造成系统崩溃的很严重啊!),alloc_pages是分配的物理连续内存的,他的返回值就是buddy同一阶的首页的page结构指针。它分配的是物理和虚拟双重连续的地址的内存。高端内存在系统中是廉价的内存,一般用户和模块都使用这个区域(除内核外尽量使用highmem)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP