Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存

这篇具有很好参考价值的文章主要介绍了Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.adb shell 获取app 进程的pid

adb shell "ps|grep com.xxx包名"

根据某个渠道包,去查询对应的pid,如下所示:
adb shell 内存,Android性能优化,android,adb,java

2.通过adb shell 查看设备的java dalvik 堆内存的最大值

执行命令行:

adb shell  getprop dalvik.vm.heapgrowthlimit

adb shell 内存,Android性能优化,android,adb,java
若是app进程中java heap(dalvik heap size) 堆内存超过384m 就会抛出oom.

若是app mainfest.xml 中设置了largeHeap=“true”,则app 进程dalvik heap limit 对应512m 限制。

adb shell 内存,Android性能优化,android,adb,java

3.查看app进程的物理rss、虚拟内存vss情况:

adb shell procrank(需要手机 root 权限),可忽略该命令。

考虑使用Top 命令行格式:

adb shell top -n 1 |findstr "packageInfo"

以4399渠道包为案例,执行的adb shell top -n 1 |findstr "\<com.minitech.mixxxxx.m4399\> \<PID\>"
adb shell 内存,Android性能优化,android,adb,java
或者通过adb shel 查询进程status 方式:

执行命令格式:

adb shell  cat /proc/app的pid/status

adb shell 内存,Android性能优化,android,adb,java
注意点:在32位(非arm64位)下,app进程中虚拟内存的峰值时3G 多,比较容易触发oom 情况。

4.通过adb shell 命令行查看app进程中内存状况:

格式:

adb shell dumpsys meminfo [pkg/pid]

可以用来查看指定进程包名的内存使用情况
执行adb shell dumpsys meminfo com.minitech.xxxx.m4399, 可以清楚知道java heap 、native heap、数据库、asset 等 ,内存数值是以KB为单位。

C:\Users\hexingen>adb shell dumpsys meminfo com.minitech.xxx.m4399
Applications Memory Usage (in Kilobytes):
Uptime: 4282829 Realtime: 4282829

** MEMINFO in pid 14622 [com.minitech.miniworld.m4399] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap   455496   455468        8        0   596992   484213   112777
  Dalvik Heap    26347    26328        0        0    45768    29384    16384
 Dalvik Other     6178     6176        0        0
        Stack     3844     3844        0        0
       Ashmem     5561     5092        0        0
    Other dev       28        0       28        0
     .so mmap    62819     5104    55760       36
    .jar mmap        4        0        4        0
    .apk mmap    49281     9980    38240        0
    .ttf mmap     1031        0      768        0
    .dex mmap    24272       16    24228        0
    .oat mmap     8604        0     3968        0
    .art mmap     3794     2224      588        2
   Other mmap     6361       20     6076        0
    GL mtrack   152964   152964        0        0
      Unknown    79528    79528        0        1
        TOTAL   886151   746744   129668       39   642760   513597   129161

 App Summary
                       Pss(KB)
                        ------
           Java Heap:    29140 //java 堆所占用的物理内存
         Native Heap:   455468 //native 堆所占用的物理内存
                Code:   138068
               Stack:     3844
            Graphics:   152964
       Private Other:    96928
              System:     9739
               //app进程中占有物理内存(等于uss+按比列的共享库物理内存)
               TOTAL:   886151       TOTAL SWAP PSS:       39

 Objects // 进程中关键对象情况 ,activity \binder 个数,可看内存泄漏
               Views:      166         ViewRootImpl:        2
         AppContexts:        5           Activities:        4
              Assets:        7        AssetManagers:        4
       Local Binders:       71        Proxy Binders:       40
       Parcel memory:       40         Parcel count:      155
    Death Recipients:        2      OpenSSL Sockets:        8

 SQL
         MEMORY_USED:     1092
  PAGECACHE_OVERFLOW:      342          MALLOC_SIZE:       79

 DATABASES //进程中数据库db 打开情况
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       40            480      222/96/23  /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_bd_embed_tea_agent.db
         4       24             31         2/20/3  /data/user/0/com.minitech.miniworld.m4399/databases/tracker.db
         4       52             91       21/29/12  /data/user/0/com.minitech.miniworld.m4399/databases/bugly_db_
         4       92            200     478/108/25  /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_ttopensdk.db
         4       24             98         1/37/4  /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_downloader.db
         4       20             17         0/30/3  /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_npth_log.db
         4       16             41        13/21/6  /data/user/0/com.minitech.miniworld.m4399/files/MobSDK/comm/dbs/.dh

 Asset Allocations  //进程中asset 打开情况
    : 1K
    zip:/data/user/0/com.minitech.miniworld.m4399/files/pangle_p/com.byted.pangle/version-4908/apk/base-1.apk:/resources.arsc: 98K

一般情况下,仅需关注 Pss Total 和 Private Dirty 列。 在某些情况下,Private Clean 和 Heap Alloc 列提供的数据也值得关注。

接下来,详细分析下以上的数据:

查看java 堆内存使用
adb shell 内存,Android性能优化,android,adb,java
若是dalvik heap size 超过jvm 阀值(通常384M 或者512M)时,就会触发java heap 导致oom。

查看进程中pss 物理内存使用情况

  • Pss total : 占用的物理内存
  • Private Dirty: app进程死亡结束后,系统可回收的arm 物理内存
  • Private clean: 当前app进程中已被系统回收的arm 物理内存
    adb shell 内存,Android性能优化,android,adb,java
    若app 进程中pss 物理内存越来越大,系统中arm处理器的可用物理内存越来越少,直到可用物理内存不够分配时,就会触发oom。

查看内存泄漏

1.AppContexts 和 Activities和ViewRootImpl 表示当前 进程中context 个数和activity个数,根view视图(即phonewindow) 个数据,结合业务查看是否超过当前存在的个数,若是超过,则发生内存泄漏,被静态或者单例类所间接持有。
在java se 中被强引用的对象,是无法被回收的

更多adb shell dumpsys meminfo 详解:https://blog.51cto.com/u_4387387/6077172。

另外:/proc/pid/maps 和/proc/pid/smaps 通过adb shell 执行需要权限,暂时无法使用。
adb shell 内存,Android性能优化,android,adb,java

5.查看当前的手机系统内存情况:

执行adb shell cat /proc/meminfo ,可查看手机处理器内存 ,当前可用的内存
adb shell 内存,Android性能优化,android,adb,java
当MemAvailable 可用内存大小越来越少,直到耗尽就触发oom。

6.adb shell 获取内存快照hrop:

执行命令行:

adb shell am dumpheap package包名 /data/local/tmp/xxx.hprof

adb shell 内存,Android性能优化,android,adb,java
执行命令行,等待执行完。通过文件 浏览器或者studio的文件管理,找到该文件,双击打开,就可以查看到详细的内存快照。
adb shell 内存,Android性能优化,android,adb,java文章来源地址https://www.toymoban.com/news/detail-615522.html

到了这里,关于Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • adb shell 查看和修改电池信息

     命令: adb shell dumpsys battery Current Battery Service state: AC powered: false //false表示没使用AC电源 USB powered: true //true表示使用USB电源 Wireless powered: false       //false表示没使用无线电源 status: 2 //2表示电池正在充电,1表示没充电 health: 2 //2表示电池状态优秀 present: true    / /true表示已

    2024年02月08日
    浏览(52)
  • Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )

    1.jvm 堆内存(dalvik 堆内存) 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 创建模拟器时,会设置 jvm heap 默认384m , 如下图所示: 当app 进程中java 层 new 对象(加起来总和)占用的堆内存达到jvm heap 峰值时,就会抛出OOM 。

    2024年02月14日
    浏览(37)
  • adb查看App日志

    同学们在进行app测试时往往需要抓包,但是有时候抓包可能并不能解决问题,这时候我们就需要进一步分析app日志错误,方法如下: 1.首先我们需要具备adb调试工具,具体教程和环境变量配置可参考其他安装文档 2.adb devices查看是否成功连接设备 3.找到我们对应App的包名 找到

    2024年02月13日
    浏览(37)
  • adb shell获取安卓设备电量ROM内存帧率等信息

    adb shell获取安卓设备电量ROM内存帧率等信息 adb shell指令获取Android设备的运行状态,如电池信息(包含电量百分比,电池状态,电池温度,电池电压,充放电电流),CPU占比,内存占比,ROM总大小,ROM已用大小,ROM可用大小,APP界面的帧率等,并封装成bat脚本 目录 一、实现方

    2024年02月10日
    浏览(28)
  • adb shell命令查看当前屏幕可见最顶层Activity和Fragment及其调用栈

    (1)当前屏幕可见页面最顶层是哪个Activity: (2)当前屏幕可见页面最顶层是哪个Fragment: (3)当前屏幕可见最顶层Activity及其调用栈: android adb命令获取处于当前屏幕的Activity_adb获取当前页面activity-CSDN博客 Android adb shell dump当前手机设备的所有activity_zhangphil的博客-CSDN博客。

    2024年02月07日
    浏览(37)
  • android 通过adb shell命令旋转Android屏幕朝向

    注意: 默认0有的为横向,有的为纵向 纵向返回结果: cur 的值 宽 短 x 高 长 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731 横向返回结果: cur 的值 宽 长 x 高 短 init=1080x1920 420dpi cur=1920x1080 app=1794x1080 rng=1080x1017-1794x1731

    2024年02月11日
    浏览(68)
  • adb 查看启动的app包名和activity

    2023年04月09日
    浏览(69)
  • Android - adb shell (查找文件 find )

    默认adb shell find . -name 文件名这样查找文件位置无法使用,如下。 记录下两种方法。 1、adb shell 进入 效果如下: 2、通过 busybox 查找文件 1)首先下载 BusyBox,下载地址为 Index of /downloads/binaries,记得选择对应设备架构的版本。adb shell cat /proc/cpuinfo 2)adb push 本地路径/busybox-

    2024年01月16日
    浏览(37)
  • Android adb shell svc 知识详解

    这个命令可以用来控制电源管理,wifi开关,数据开关(就是上网流量),注意需要root权限。 有兴趣的可以一起学习一下。 一、svc 常用命令: 其实还有其他svc 命令,如果想深入了解可以往后看看。 查看系统是否安装了svc 路径 /system/bin/svc 如果存在这个 svc 文件,那就就可以执

    2024年02月09日
    浏览(34)
  • Android adb shell命令捕获systemtrace

    Android adb shell命令捕获systemtrace   (1)抓取trace文件: -t    时长,20s,20秒的trace文件。 -o   保存文件路径。     (2)把trace文件从手机中pull拉取到电脑桌面:       (3)在谷歌官网: Perfetto UI 打开trace文件:       Android ADB(Andorid Debug Bridge)调试真机设备_adb在线执行器_zhang

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包