meminfo
cat /proc/meminfo
MemTotal: 1922108 kB
MemFree: 230964 kB
Buffers: 23960 kB
Cached: 550796 kB
SwapCached: 0 kB
Active: 980992 kB
Inactive: 470032 kB
Active(anon): 876316 kB
Inactive(anon): 884 kB
Active(file): 104676 kB
Inactive(file): 469148 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 1181696 kB
HighFree: 4000 kB
LowTotal: 740412 kB
LowFree: 226964 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 56 kB
Writeback: 0 kB
AnonPages: 876356 kB
Mapped: 179344 kB
Shmem: 948 kB
Slab: 50208 kB
SReclaimable: 18688 kB
SUnreclaim: 31520 kB
KernelStack: 9712 kB
PageTables: 22272 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 961052 kB
Committed_AS: 23739364 kB
VmallocTotal: 122880 kB
VmallocUsed: 30024 kB
VmallocChunk: 59236 kB
MemTotal:系统总的物理内存大小
MemFree:物理内存大小,系统未使用。
Buffers:用来给文件做缓冲的大小
Cached:高速缓冲存储器用的内存大小
SwapCached:被高速缓冲存储器用的交换空间的大小,已经被交换出来的内存。
MemTotal 1922108kB
MemFree 327096kB
Buffers 45512kB
Cached 558316kB
可用内存=Memfree+Cached=327096kB+558316kB~=865MB
应用程序+框架=MemTotal-(Memfree+Cached)~=1877MB-865MB~=1012MB。
free
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
procrank
root@msm8974:/ # procrank
PID Vss Rss Pss Uss cmdline
3608 1432368K 86644K 53211K 47696K system_server
1155 80172K 34712K 31776K 29616K node-core-cluster
3317 1296488K 54320K 20553K 14636K zygote
4943 719552K 49108K 19842K 16960K com.android.phone
4346 699176K 39872K 12681K 10588K android.process.media
4793 699832K 38656K 12234K 10492K android.process.acore
VSS:等同于ps命令列出的VSZ,是单个进程全部可访问的地址空间。
RSS:单个进程实际占用的内存大小,包括进程所使用的所有共享库的全部内存大小。对于单个共享库,尽管无论多少进程使用,实际该共享库只会被装入内存一次。
PSS:按比例包含其所使用的库大小。
USS:进程的全部私有内存大小,如果进程退出,其将被返还给系统,对于可疑的内存泄漏,该数字可用于进行监控。
内存泄漏诊断
DDMS 内存工具
安装android studio,见<Ubuntu 命令行安装android studio>
当然也可以直接sudo apt-get install ddms进行安装,个人觉得android studio环境自带的还是比较好使用的。
Memory Analyzer Tool
其是一个Java堆分析工具,可以用来查找内存泄漏以及减少内存消耗。可以用来分析java堆dump
下载地址<http://www.eclipse.org/mat/downloads.php>,我下载的是<Linux (x86_64/GTK 2)>stand alone版本,这样可以不安装eclipse,在使用ddms时安装了android studio。
解压后目录内容如下:
standalone版本需要进行格式转储
./out/host/linux-x86/bin/hprof-conv ~/com.android.smspush.hprof smspush-b.hprof
hprof-conv工具在编译完成的目录下可以找到,实际上所在位置是sdk/tools/hprof-conv a.hprof b.hprof。在解压后的目录下可以找到MemoryAnalyzer,然后可以使用如下命令打开
gsc@gsc-250:~/Downloads/mat$ ./MemoryAnalyzer XXX/smspush-b.hprof
当然也可以打开窗口后再open file。
hprof文件通过ddms获取
systrace
打开的chrome使用如下的版本:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*; sudo apt-get -f install
然后,就可以去搜索使用了。
系统卡顿
卡顿是一种常见的性能问题,涉及到比较多的模块。例如CPU scheduler,CPU governor,LPM,HWUI,display合成,surfaceFlinger,openGL,GPU性能,UI framework等,需要使用systrace log来进行初步的分析。
当出现此问题时,请enable下面的event并开始抓取systrace log
adb shell "echo sched:sched_mi"