adb 测试手机内存 cpu 以及几种方式对比
来源:互联网 发布:淘宝手游充值代理 编辑:程序博客网 时间:2024/04/29 23:47
查看内存信息:
一般来说内存占用大小有如下规律:
VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加
VSS和RSS对查看某一进程自身的内存状况没什么作用,因为他们包含了共享库的内存使用,而往往共享库的资源占用比重是很大的,这样就稀释了对Process自身创建内存波动。
我们一般观察Uss来反映一个进程的内存使用情况,Uss 的大小代表了只属于本进程正在使用的内存大小,这些内存在此进程被杀掉之后,会被完整的回收掉。
USS是一个非常有用的数字,因为它揭示了运行一个特定进程的真实的内存增量大小,如果进程被终止,USS就是实际被返还给系统的内存大小。USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。
怀疑某个程序有内存泄露可以查看USS值是否一直有增加。
测试单个APP可使用如下命令: adb shell dumpsys meminfo com.sohu.sohuvideo
截图如下:
其中native heap是指c/c++申请的内存空间,而dalvik heap 是指java申请的内存空间,heap alloc是指分配的空间,heap free是指剩余空间,heap size是指最大的分配空间,heap size = heap alloc + heap free;
这里讲了native和dalvik的详细内容:http://blog.csdn.net/u013721793/article/details/51204001
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此不赘述。Native Memory没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种系统的实现并不一样),以及生成的Java字节码大小、创建的线程数量、维持java对象的状态信息大小(用于GC)以及一些第三方的包,比如JDBC驱动使用的native内存。
Native Memory 存了什么?
- 管理java heap的状态数据(用于GC);
- JNI调用,也就是Native Stack;
- JIT(即使编译器)编译时使用Native Memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在Native Memory;
- NIO direct buffer。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。
- 对于IBM的JVM某些版本实现,类加载器和类信息都是保存在Native Memory中的。
曾经一直用total数据做参考,但是测出来的数据,APP开发不认,说太大,他们用的是dalvik heap size 这个数据,然后我就不知道用什么数据测内存了,目前保留两种方式。
查看CPU信息:
单个APP: adb shell dumpsys cpuinfo |findstr com.sohu.sohuvideo
整体手机: adb shell dumpsys cpuinfo | findstr TOTAL
adb shell top:adb shell top 方法也同样可以对内存和CPU进行测试
top 用法
>adb shell top -hUsage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ] -m num Maximum number of processes to display. 最多显示多少个进程 -n num Updates to show before exiting. 刷新次数 -d num Seconds to wait between updates. 刷新间隔时间(默认5秒) -s col Column to sort by (cpu,vss,rss,thr). 按哪列排序 -t Show threads instead of processes. 显示线程信息而不是进程 -h Display this help screen. 显示帮助文档
正常使用adb shell top 会一直不断刷新,根据top用法可设置单次情况,如:adb shell top -m 10 -s cpu -n 1
第一组数据的含义:
User 处于用户态的运行时间,不包含优先值为负进程 Nice 优先值为负的进程所占用的CPU时间 Sys 处于核心态的运行时间 Idle 除IO等待时间以外的其它等待时间 IOW IO等待时间 IRQ 硬中断时间 SIRQ 软中断时间
第二组数据的含义:
PID 进程idPR 优先级CPU% 当前瞬时CPU占用率S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程#THR 程序当前所用的线程数VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUNDUID 进程所有者的用户idName 进程的名称
但是细心的同学会发现,两种测试CPU的方法的结果并不一致,且相差很多,那是什么原因呢?
http://blog.csdn.net/oujunli/article/details/51463707
这篇博客写的比较详细,计算方法不一致而已!
- adb 测试手机内存 cpu 以及几种方式对比
- JS几种变量交换方式以及性能分析对比
- 测试Android应用内存、CPU以及耗电量
- 几种intel CPU性能对比
- CPU占用内存率高的几种可能以及解决方法
- ADB连接手机的两种方式
- ADB connect 手机的两种方式
- JavaScript 几种数组遍历方式以及性能分析对比
- JS几种数组遍历方式以及性能分析对比
- JS几种数组遍历方式以及性能分析对比
- 高通骁龙CPU的手机对比
- jquery的几种ajax方式对比
- jquery的几种ajax方式对比
- jquery的几种ajax方式对比
- mui几种页面跳转方式对比
- mui几种页面跳转方式对比
- 几种常见GC方式对比
- 内存分配的几种方式,以及动态内存传递的注意事项
- @SuppressLint("NewApi")从何而来
- 第4章 ext文件系统机制
- 双麦克风语音增强之ANF 自适应零点形成
- JAVA学习日记----------排序篇01
- html 分隔线
- adb 测试手机内存 cpu 以及几种方式对比
- <c:foreach>标签循环map集合不起作用
- C++简单实现回调机制
- 内存分配区域
- Jenkins入门系列之——01第一章 Jenkins是什么?
- ORACLE使用Resource Manage管理资源
- VS2017——C语言dll编译并调用
- 前端学习笔记2:使用表单标签,与用户交互
- caffe中的一些特殊层