内存分析:
条件:开移动侦测,车道校准,停车监控,智能算法,后拉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
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