Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存
1.adb shell 获取app 进程的pid
adb shell "ps|grep com.xxx包名"
根据某个渠道包,去查询对应的pid,如下所示:

2.通过adb shell 查看设备的java dalvik 堆内存的最大值
执行命令行:
adb shell getprop dalvik.vm.heapgrowthlimit

若是app进程中java heap(dalvik heap size) 堆内存超过384m 就会抛出oom.
若是app mainfest.xml 中设置了largeHeap=“true”,则app 进程dalvik heap limit 对应512m 限制。

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 shel 查询进程status 方式:
执行命令格式:
adb shell cat /proc/app的pid/status

注意点:在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 HeapTotal Dirty Clean Dirty Size Alloc Free------ ------ ------ ------ ------ ------ ------Native Heap 455496 455468 8 0 596992 484213 112777Dalvik Heap 26347 26328 0 0 45768 29384 16384Dalvik Other 6178 6176 0 0Stack 3844 3844 0 0Ashmem 5561 5092 0 0Other 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 2Other mmap 6361 20 6076 0GL mtrack 152964 152964 0 0Unknown 79528 79528 0 1TOTAL 886151 746744 129668 39 642760 513597 129161App SummaryPss(KB)------Java Heap: 29140 //java 堆所占用的物理内存Native Heap: 455468 //native 堆所占用的物理内存Code: 138068Stack: 3844Graphics: 152964Private Other: 96928System: 9739//app进程中占有物理内存(等于uss+按比列的共享库物理内存)TOTAL: 886151 TOTAL SWAP PSS: 39Objects // 进程中关键对象情况 ,activity \binder 个数,可看内存泄漏Views: 166 ViewRootImpl: 2AppContexts: 5 Activities: 4Assets: 7 AssetManagers: 4Local Binders: 71 Proxy Binders: 40Parcel memory: 40 Parcel count: 155Death Recipients: 2 OpenSSL Sockets: 8SQLMEMORY_USED: 1092PAGECACHE_OVERFLOW: 342 MALLOC_SIZE: 79DATABASES //进程中数据库db 打开情况pgsz dbsz Lookaside(b) cache Dbname4 40 480 222/96/23 /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_bd_embed_tea_agent.db4 24 31 2/20/3 /data/user/0/com.minitech.miniworld.m4399/databases/tracker.db4 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.db4 24 98 1/37/4 /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_downloader.db4 20 17 0/30/3 /data/user/0/com.minitech.miniworld.m4399/databases/pangle_com.byted.pangle_npth_log.db4 16 41 13/21/6 /data/user/0/com.minitech.miniworld.m4399/files/MobSDK/comm/dbs/.dhAsset Allocations //进程中asset 打开情况: 1Kzip:/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 堆内存使用:

若是dalvik heap size 超过jvm 阀值(通常384M 或者512M)时,就会触发java heap 导致oom。
查看进程中pss 物理内存使用情况:
- Pss total : 占用的物理内存
- Private Dirty: app进程死亡结束后,系统可回收的arm 物理内存
- Private clean: 当前app进程中已被系统回收的arm 物理内存

若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 执行需要权限,暂时无法使用。

5.查看当前的手机系统内存情况:
执行adb shell cat /proc/meminfo ,可查看手机处理器内存 ,当前可用的内存

当MemAvailable 可用内存大小越来越少,直到耗尽就触发oom。
6.adb shell 获取内存快照hrop:
执行命令行:
adb shell am dumpheap package包名 /data/local/tmp/xxx.hprof

执行命令行,等待执行完。通过文件 浏览器或者studio的文件管理,找到该文件,双击打开,就可以查看到详细的内存快照。

相关文章:
Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存
1.adb shell 获取app 进程的pid adb shell "ps|grep com.xxx包名"根据某个渠道包,去查询对应的pid,如下所示: 2.通过adb shell 查看设备的java dalvik 堆内存的最大值 执行命令行: adb shell getprop dalvik.vm.h…...
java篇 类的进阶0x0A:万类之祖:Object 类
文章目录 万类之祖:Object 类hashCode() 与 equals()hashCode() 方法equals() 方法 vs. equals()String 的 equals() 为什么要重写 hashCode 和 equals 方法重写(覆盖)前 hashCode() 和 equals() 的作用什么情况下需要重写(覆盖&a…...
AVFoundation - 音频录制
文章目录 需要调用到麦克风方法,别忘记添加 Privacy - Microphone Usage Description @interface AudioRecorder ()<AVAudioRecorderDelegate>@property (strong, nonatomic) AVAudioRecorder *recorder;@end@implementation AudioRecorder- (void...
Jmeter+MySQL链接+JDBC Connection配置元件+使用
参考大大的博客学习:怎么用JMeter操作MySQL数据库?看完秒懂!_jmeter mysql_程序员馨馨的博客-CSDN博客 注:里面所有没打码的都是假数据,麻烦大家自行修改正确的信息。 一、背景 需要取数据库中的值,作为…...
统一观测丨使用 Prometheus 监控 Cassandra 数据库最佳实践
作者:元格 本篇内容主要包括四部分:Cassandra 概览介绍、常见关键指标解读、常见告警规则解读、如何通过 Prometheus 建立相应监控体系。 Cassandra 简介 Cassandra 是什么? Apache Cassandra 是一个开源、分布式、去中心化、弹性可伸缩、…...
Hive视图
hive的视图 简介 hive的视图简单理解为逻辑上的表hive只支持逻辑视图,不支持物化视图视图存在的意义 对数据进行局部暴露(涉及隐私的数据不暴露)简化复杂查询 创建视图: create view if not exists v_1 as select uid,movie f…...
node中使用jsonwebtoken实现身份认证
在现代web应用中,用户身份认证是非常重要且必不可少的一环。而使用Node.js和Express框架,可以方便地实现用户身份认证。而在这个过程中,jsonwebtoken这个基于JWT协议的模块可以帮助我们实现安全且可靠的身份认证机制,可以让我们轻…...
pyspark笔记:读取 处理csv文件
pyspark cmd上的命令 1 读取文件 1.1 基本读取方式 注意读取出来的格式是Pyspark DataFrame,不是DataFrame,所以一些操作上是有区别的 1.1.1 format DataFrame spark.read.format("csv").option(name,value).load(path) format表示读取…...
多租户分缓存处理
多租户redis缓存分租户处理 那么数据库方面已经做到了拦截,但是缓存还是没有分租户,还是通通一个文件夹里, 想实现上图效果,global文件夹里存的是公共缓存。 首先,那么就要规定一个俗称,缓存名字带有globa…...
RN输入框默认设置数字键盘
<TextInput keyboardType"numeric"/> keyboardType 决定弹出何种软键盘类型,譬如numeric(纯数字键盘)。 See screenshots of all the types here. 这些值在所有平台都可用: defaultnumber-paddecimal-padnume…...
计算机网络——应用层
文章目录 **1 网络应用模型****2 域名系统DNS****3 文件传输协议FTP****4 电子邮件****4.1 电子邮件系统的组成结构****4.2 电子邮件格式与MIME****4.3 SMTP和POP3** **5 万维网WWW****5.1 HTTP** 1 网络应用模型 客户/服务器模型 C/S 服务器服务于许多来自其他称为客户机的主…...
【C++】写一个函数实现系统时间与输入时间进行比较
目录 1 代码 2 运行结果 时间比较函数: 输入为字符串2023-7-28,将字符串分解为年、月、日信息。 获取系统时间2023-7-24,然后将输入时间和系统时间进行比较,输出比较结果。 1 代码 #include <ctime> #include<iostream> #include<vector> using names…...
uniapp 微信小程序 navigationBarBackgroundColor 标题栏颜色渐变
大体思路: 第一步:“navigationStyle”:“custom” 第二步: template内 重点:给view添加ref“top” 第三步:添加渐变色样式 1、pages.json {"path" : "pages/user/user","style" : …...
ffplay播放器剖析(7)----音视频暂停模块分析
文章目录 1. 暂停触发流程2. toggle_pause3. stream_toggle_pause 1. 暂停触发流程 1.通过SDL触发事件调用toggle_pause 2.toggle_pause调用stream_toggle_pause 3.stream_toggle_pause修改暂停变量 2. toggle_pause static void toggle_pause(VideoState *is) {stream_to…...
ceph-mon运行原理分析
一、流程:ceph-deploy部署ceph-mon组建集群 1.ceph-deploy部署ceph-mon的工作流程及首次启动 1)通过命令创建ceph-mon,命令为:ceph-deploy create mon keyring def mon(args):if args.subcommand create:mon_create(args)elif…...
听GPT 讲K8s源代码--pkg(八)
k8s项目中 pkg/kubelet/envvars,pkg/kubelet/events,pkg/kubelet/eviction,pkg/kubelet/images,pkg/kubelet/kubeletconfig这些目录都是 kubelet 组件的不同功能模块所在的代码目录。 pkg/kubelet/envvars 目录中包含了与容器运行…...
差速驱动机器人的车轮里程计模型
一、说明 车轮测程法是指使用旋转编码器(即连接到车轮电机以测量旋转的传感器)的测程法(即估计运动和位置)。这是轮式机器人和自动驾驶汽车定位的有用技术。 在本文中,我们将通过探索差速驱动机器人的车轮里程计模型来深入研究车轮里...
Pytorch个人学习记录总结 09
目录 损失函数与反向传播 L1Loss MSELOSS CrossEntropyLoss 损失函数与反向传播 所需的Loss计算函数都在torch.nn的LossFunctions中,官方网址是:torch.nn — PyTorch 2.0 documentation。举例了L1Loss、MSELoss、CrossEntropyLoss。 在这些Loss函数…...
代码随想录算法训练营day51 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
题目链接309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length < 2) {return 0;}int[][] dp new int[prices.length][2];dp[0][0] -prices[0];dp[0][1] 0;dp[1][0] Math.max(dp[0][0], dp[0][1] - pr…...
做UI设计需要具备什么平面技能呢优漫动游
想要成为一名合格的UI设计师,那么需要学会的技能是非常多的,UI设计包含的知识点也比较多,那么具体做UI设计需要具备什么技能呢?来看看下面小编的详细介绍吧。 —、软件能力 一位好的ui设计师除了需要精通Photoshop.IlustratorDW.C4D等设…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
