内存分析:
条件:开移动侦测,车道校准,停车监控,智能算法,后拉uvc
执行cat /proc/meminfo:
MemTotal: 66204 kB
MemFree: 25356 kB //当前剩余内存为24M
Buffers: 1788 kB //该部分对于系统来说是占用的
Cached: 7380 kB //该部分对于系统来说是占用的
Active: 22384 kB
Inactive: 1260 kB
Active(anon): 16072 kB
Inactive(anon): 48 kB
Active(file): 6312 kB
Inactive(file): 1212 kB
Unevictable: 1588 kB
LowTotal: 66204 kB
LowFree: 25356 kB
AnonPages: 16064 kB
Mapped: 7420 kB
Shmem: 56 kB
Slab: 4416 kB
SReclaimable: 1416 kB
SUnreclaim: 3000 kB
KernelStack: 808 kB
PageTables: 360 kB
CommitLimit: 33100 kB
Committed_AS: 25560 kB
VmallocTotal: 892928 kB
VmallocUsed: 45068 kB
VmallocChunk: 610664 kB
执行root@android:/ # ./busybox free 得到结果如下:
root@android:/ # ./busybox free -m
total used free shared buffers
Mem: 64 39 24 0 1
-/+ buffers: 38 26
Swap: 0 0 0
从以上结果可知当前系统已使用内存为:约为39M 剩余内存为 24M
3,接下来执行统计所有进程消耗的内存:
PID Vss Rss Pss Uss cmdline
59 82712K 31828K 31617K 31508K /system/bin/mediaserver //内存消耗大户,潜在优化对象
58 3700K 3100K 2889K 2780K /system/bin/newcdr
347 408K 408K 303K 284K procrank
56 416K 416K 290K 264K /system/bin/vold
65 348K 348K 256K 240K /system/bin/sh
52 332K 332K 251K 208K /init
61 196K 196K 192K 192K /sbin/adbd
60 236K 236K 133K 112K /system/bin/debuggerd
51 188K 188K 115K 80K /sbin/ueventd
55 196K 196K 110K 96K /system/bin/servicemanager
1 180K 180K 99K 56K /init
------ ------ ------
36259K 35820K TOTAL
总共消耗:34.98M
那么问题来了:系统总的内存USED为39M ,进程消耗内存为:34.98M 中间有4M的差值?
我们在看cat/meminfo/这项里的Slab、PageTables这两项,首先slab是内核为了高性能每个需要重复使用的对象都会有个池,这个slab池会cache大量常用的对象,所以会消耗大量的内存
slab:4416 kB
命令查看:
echo `cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{print sum/1024/1024}'` MB
PageTables:是系统boot的时候就会根据内存大小算出来分配出去的,18内核是1.56%左右,32内核由于cgroup的原因会在2.3%
命令查看:
echo `grep PageTables /proc/meminfo | awk '{print $2}'` KB
总结:内存的去向主要有3个:1. 进程消耗。 2. slab消耗 3.pagetable消耗
SDV 内存分析(物理内存128M) 测试条件
xxxdroid 内存项
启动应用未录像 1
linux系统内核保留
约6.8M
2
ION 内存
80M
3
mediaserver 多媒体
3.97M(4060K)
5
logger
0.375M (384K)
6
TCP/SOCKET
74K
7
Buffers
12K
8
sdv 应用
6.05 M (6188K)
9
Cached
4.63M(4744k)
10
init
184K
11
ueventd
188K
12
servicemanager
320K
13
vold
824K
14
debuggerd
388K
15
adbd
176K
16
standbyservice
1604K
17
sh
820K
18
Slab
5412K
19
PageTables:
336K
20
MemFree
约18.7M (19068K)
测试条件: SDV 物理内存大小: 128M byte,通过
调试方法:在commandline中 memblock=debug
memory layout
内存范围
大小 byte
kernel _stext代码段、data段
[0x000000400081c0-0x000000405efe57]
5.905M(0x5e7c98)
kernel initrd 段
[0x00000041000000-0x00000041037fe0]
224K
页表内存
[0x00000040004000-0x00000040007fff]
16K
android RAM_CONSOLE
[ 41f20800-41f307ff]
64K
sys_config.fex
[0x00000041f00000-0x00000041f20000]
128K
STANDBY_MEM_SIZE
[0x00000041f20000-0x00000041f20800]
2K
alloc_base_nid
20.1K(0x5060)
中断向量
4K
bootmem bitmap
56KB
pmd表内存
8736byte
fixmap
896 kB
ION
80M
cat proc/meminfo
top
cat proc/slabinfo
echo f > /proc/sysrq-trigger
130|root@camdroid:/ #
130|root@camdroid:/ # echo f > /proc/sysrq-trigger
[ 37.890423] SysRq : Manual OOM execution
[ 37.895297] kworker/0:0 invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
[ 37.905132] Backtrace:
[ 37.908097] [] (dump_backtrace+0x0/0x110) from [] (dump_stack+0x18/0x1c)
[ 37.917666] r6:00000000 r5:000000d0 r4:c0e82080 r3:c0460740
[ 37.924466] [] (dump_stack+0x0/0x1c) from [] (dump_header.isra.15+0x54/0x124)
[ 37.934503] [VFE_WARN] Nobody is waiting on this video buffer,buf = 0xc0cd8640
[ 37.942730] [] (dump_header.isra.15+0x0/0x124) from [] (oom_kill_process.part.18.constprop.19+0x44/0x1e4)
[ 37.955475] r6:00000000 r5:000000d0 r4:c0e82080
[ 37.961009] [] (oom_kill_process.part.18.constprop.19+0x0/0x1e4) from [] (out_of_memory+0x2c4/0x33c)
[ 37.973267] [VFE_WARN] Nobody is waiting on this video buffer,buf = 0xc0cd86c0
[ 37.981499] [] (out_of_memory+0x0/0x33c) from [] (moom_callback+0x2c/0x38)
[ 37.991261] [] (moom_callback+0x0/0x38) from [] (process_one_work+0x1e0/0x338)
[ 38.001308] [VFE_WARN]Only two buffer left for csi
[ 38.006823] [] (process_one_work+0x0/0x338) from [] (worker_thread+0x1c0/0x2c8)
[ 38.017071] [] (worker_thread+0x0/0x2c8) from [] (kthread+0x94/0xa0)
[ 38.026164] [] (kthread+0x0/0xa0) from [] (do_exit+0x0/0x660)
[ 38.034655] [VFE]capture video mode!
[ 38.043738] r6:c0031df0 r5:c0046a58 r4:c1821ed0
[ 38.049255] Mem-info:
[ 38.051880] Normal per-cpu:
[ 38.055071] CPU 0: hi: 18, btch: 3 usd: 17
[ 38.060591] active_anon:1073 inactive_anon:8 isolated_anon:0
[ 38.060597] active_file:244 inactive_file:1349 isolated_file:0
[ 38.060602] unevictable:0 dirty:0 writeback:0 unstable:0
[ 38.060607] free:3051 slab_reclaimable:292 slab_unreclaimable:837
[ 38.060613] mapped:1115 shmem:11 pagetables:69 bounce:0
[ 38.060618] free_cma:0
[ 38.095613] [VFE]capture video first frame done!
[ 38.100914] [VFE_WARN]Only two buffer left for csi
[ 38.106358] Normal free:12204kB min:1016kB low:1268kB high:1524kB active_anon:4292kB inactive_anon:32kB active_file:976kB inactive_file:5396kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:65024kB mlocked:0kB dirty:0kB writeback:0kB mapped:4460kB shmem:44kB slab_reclaimable:1168kB slab_unreclaimable:3348kB kernel_stack:816kB pagetables:276kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
[ 38.150896] [VFE]capture video mode!
[ 38.154961] lowmem_reserve[]: 0 0
[ 38.159029] Normal: 19*4kB (U) 104*8kB (UEM)
[ 38.164266] [VFE]capture video first frame done!
[ 38.169770] [VFE_WARN]Only two buffer left for csi
[ 38.175193] 124*16kB (UEM) 63*32kB (UEM) 34*64kB (UEM) 8*128kB (M) 0*256kB 0*512kB 0*1024kB 0*2048kB 1*4096kB (R) = 12204kB
[ 38.189138] 1604 total pagecache pages
[ 38.194127] 16384 pages of RAM
[ 38.197625] [VFE]capture video mode!
[ 38.201720] 3206 free pages
[ 38.205003] 8675 reserved pages
[ 38.208577] 1129 slab pages
[ 38.211782] 2319 pages shared
[ 38.215166] 0 pages swap cached
[ 38.218831] [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name
[ 38.227173] [ 54] 0 54 87 47 0 0 0 ueventd
[ 38.235858] [VFE]capture video first frame done!
[ 38.241073] [VFE_WARN]Only two buffer left for csi
[ 38.246591] [ 55] 0 55 98 60 0 0 0 init
[ 38.254907] [ 58] 1000 58 222 80 0 0 0 servicemanager
[ 38.264279] [ 59] 0 59 946 184 0 0 0 vold
[ 38.272685] [VFE]capture video mode!
[ 38.276760] [ 60] 0 60 9902 1004 0 0 0 mediaserver
[ 38.285840] [ 62] 0 62 6111 1122 0 0 0 ccdr 单位: 以页(4K)为单位, 1122 个页,即 (1122/256) M = 4.3828125 M
[ 38.294246] [ 63] 0 63 862 45 0 0 0 adbd
[ 38.302554] [VFE]capture video first frame done!
[ 38.307853] [VFE_WARN]Only two buffer left for csi
[ 38.313281] [ 64] 0 64 233 97 0 0 0 debuggerd
[ 38.322169] [ 65] 0 65 1075 401 0 0 0 standbyservice
[ 38.331441] [VFE]capture video mode!
[ 38.335605] [ 69] 0 69 204 116 0 0 0 sh
[ 38.348734] Out of memory: Kill process 62 (ccdr) score 117 or sacrifice child
[ 38.356954] Killed process 62 (ccdr) total-vm:24444kB, anon-rss:1760kB, file-rss:2728kB
[ 38.366026] [VFE]capture video first frame done!
[ 38.371239] [VFE_WARN]Only two buffer left for csi
[ 38.382458] init: waitpid returned pid 62, status = 00000009
[ 38.388866] init: process 'ccdr', pid 62 exited
[ 38.397783] [VFE]capture video mode!
root@camdroid:/ # [ 38.407329] [VFE]vfe_close [ 38.410536] [h22_mipi Raw]CSI_SUBDEV_PWR_OFF! [ 38.415468] [VFE]mclk off [ 38.456069] [VFE]..........................vfe clk close!....................... [ 38.464462] [VFE]vfe_close end [ 44.693656] ****************Set_Rset_Cap=2*********** [ 75.998831] charger->usb_valid = 0 [ 76.002730] set usb vol-lim to 4000 mV, cur-lim to 0 mA