我正在使用DM368开发IP相机,当程序正常运行过程中,有时候会出现下面的内存问题,触发oom-killer:
oom-killer: gfp_mask=0xd0, order=1
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:4
cpu 0 cold: high 6, batch 1 used:0
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1176kB (0kB HighMem)
Active:5991 inactive:5072 dirty:0 writeback:0 unstable:0 free:294 slab:2228 mapp
ed:152 pagetables:203
DMA free:1176kB min:1052kB low:1312kB high:1576kB active:23116kB inactive:21148k
B present:69632kB pages_scanned:19456 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 22*4kB 6*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1176kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
17408 pages of RAM
456 free pages
2742 reserved pages
2228 slab pages
863 pages shared
0 pages swap cached
Out of Memory: Kill process 545 (av_server.out) score 2845 and children.
Out of memory: Killed process 545 (av_server.out).
oom-killer: gfp_mask=0xd0, order=1
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:1
cpu 0 cold: high 6, batch 1 used:0
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1144kB (0kB HighMem)
Active:5860 inactive:4959 dirty:0 writeback:0 unstable:0 free:286 slab:2569 mapp
ed:73 pagetables:160
DMA free:1132kB min:1052kB low:1312kB high:1576kB active:23440kB inactive:19836k
B present:69632kB pages_scanned:11796 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 13*4kB 3*8kB 0*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1132kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
17408 pages of RAM
398 free pages
2742 reserved pages
2569 slab pages
645 pages shared
0 pages swap cached
Out of Memory: Kill process 523 (system_server) score 2215 and children.
Out of memory: Killed process 523 (system_server).
一旦运行过程中出现上面的问题,那么再次上电开机以后,程序将无法启动。出现下面的问题:
IP-Config: No network devices available.
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 176K
INIT: version 2.86 booting
0
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.
0
JFFS2 notice: (454) read_dnode: node CRC failed on dnode at 0xbfdfe0: read 0xfff
fffff, calculated 0xebc0bf65
oom-killer: gfp_mask=0xd0, order=0
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:4
cpu 0 cold: high 6, batch 1 used:5
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1152kB (0kB HighMem)
Active:5352 inactive:5085 dirty:0 writeback:0 unstable:0 free:288 slab:6786 mapp
ed:1 pagetables:21
DMA free:1152kB min:1144kB low:1428kB high:1716kB active:21408kB inactive:20340k
B present:81920kB pages_scanned:31978 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 2*4kB 1*8kB 1*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1152kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
20480 pages of RAM
347 free pages
2736 reserved pages
6786 slab pages
52 pages shared
0 pages swap cached
Out of Memory: Kill process 215 (rcS) score 72 and children.
Out of memory: Killed process 451 (sh).
oom-killer: gfp_mask=0x201d2, order=0
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:17
cpu 0 cold: high 6, batch 1 used:5
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1236kB (0kB HighMem)
Active:5260 inactive:5152 dirty:0 writeback:0 unstable:0 free:309 slab:6787 mapp
ed:1 pagetables:17
DMA free:1236kB min:1144kB low:1428kB high:1716kB active:20884kB inactive:20764k
B present:81920kB pages_scanned:37015 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 15*4kB 5*8kB 1*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1236kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
20480 pages of RAM
377 free pages
2736 reserved pages
6787 slab pages
52 pages shared
0 pages swap cached
Out of Memory: Kill process 214 (init) score 48 and children.
Out of memory: Killed process 215 (rcS).
oom-killer: gfp_mask=0xd0, order=0
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:6
cpu 0 cold: high 6, batch 1 used:0
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1144kB (0kB HighMem)
Active:5339 inactive:5122 dirty:0 writeback:0 unstable:0 free:286 slab:6789 mapp
ed:70 pagetables:10
DMA free:1160kB min:1144kB low:1428kB high:1716kB active:21356kB inactive:20488k
B present:81920kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 0*4kB 3*8kB 1*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1160kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
20480 pages of RAM
337 free pages
2736 reserved pages
6789 slab pages
120 pages shared
0 pages swap cached
Out of Memory: Kill process 454 (chmod) score 46 and children.
Out of memory: Killed process 454 (chmod).
INIT: Entering runlevel: 3
oom-killer: gfp_mask=0xd0, order=0
Mem-info:
DMA per-cpu:
cpu 0 hot: high 18, batch 3 used:2
cpu 0 cold: high 6, batch 1 used:5
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 1152kB (0kB HighMem)
Active:5288 inactive:5164 dirty:0 writeback:0 unstable:0 free:288 slab:6802 mapp
ed:74 pagetables:10
DMA free:1152kB min:1144kB low:1428kB high:1716kB active:21252kB inactive:20556k
B present:81920kB pages_scanned:2346 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB page
s_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag
es_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:
0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 2*4kB 1*8kB 1*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB
0*4096kB 0*8192kB 0*16384kB = 1152kB
DMA32: empty
Normal: empty
HighMem: empty
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap = 0kB
Total swap = 0kB
Free swap: 0kB
20480 pages of RAM
333 free pages
2736 reserved pages
6802 slab pages
122 pages shared
0 pages swap cached
我的启动脚本文件是这样的:
mount -t jffs2 /dev/mtdblock4 /mnt/flash
cd /mnt/flash
chmod 777 *
cp -rf /mnt/flash/* /root
cd /root
./MhInit
我发现,正常情况下mount,chmod的操作都是很快的,一旦出现上面的内存错误以后,运行到这里的时候都特别慢。运行mount -t jffs2 /dev/mtdblock4 /mnt/flash 需要30秒以上时间,有时候出现Empty flash at... , JFFS2 notice: (454) read_dnode: node CRC failed on dnode at 0xbfdfe0: read 0xffffffff, calculated 0xebc0bf65 之类的错误。运行到chmod 777 * 的时候,也非常的慢,而且出现上面的内存oom-killer错误,有时候在下面拷贝的时候出错。
在我的程序当中,使用mtdblock4作为用户分区,系统文件,日志文件,还有一些执行程序等放到了这个分区,程序执行过程中可能会随时对用户分区的文件进行读写。
如果是我程序的原因导致运行过程中的内存错误,那开机的时候怎么会出现的?难道是运行过程中flash新的坏块引起的?一旦出现这个内存错误无法开机,我把用户分区使用nand erase擦除一下,就又可以正常启动,看上去好像跟flash有关,但是怎么会mount和chmod的时候出现异常呢?nand flash坏块会影响到jffs2文件系统的稳定性吗?