原生android的内存性能提升方面的方案大致设计

一 测试目标:
以满足用户设备的内存性能和不杀后台为目标。
1:满足用户设备的内存性能是指不出现因为内存原因导致的安卓设备死机,卡顿等问题。

2:满足不杀后台是指整个设备使用时,不出现后台app被杀。
通常是估算如果有后台被杀,则该设备所最多能容纳的app数量值。


二 测试思路:
原生android的内存架构设计会优先考虑内存性能,为了性能,会牺牲掉后台app驻留能力。
所以可以首要关注满足不杀后台这一目标。

另外实际应用中,多是需要做上面测试目标的第2个估算,所以下来会针对这个做详细设计。
可以在测试时,选取首次出现杀后台问题的这一时间点,捕获下此时系统对应的整机内存分布,以便算出设备容纳的app数量以及还有无优化空间。


三 测试方法:
1: 清空android设备内存驻留的所有app,并重启。

2:开机后,测试app启动后,操作2分钟,再退出启动下一个app.
这样连续启动操作若干个app,直至出现第一个后台杀进程时,捕获下此时系统对应的整机内存分布,并记录下此时已经启动并操作过的app数目。
(选取app时, 一般选取用户场景中高频使用的app)

3:估算杀进程时间点对应的整机总共消耗内存容量大小:
(totalpss - totalswappss)(用户态内存消耗) +  
(shmem + slab_unreclaimable + vmalloc_used + page_tables + kernel_stack + ion_heap)(内核态内存消耗,很多是/proc/meminfo里面的) +
memInfo.getZramTotalSizeKb() (zram占的实际物理内存大小)


四 进一步的提升后台驻留能力方面的优化方法:

如果目标是在不牺牲性能的情况下,使得有更多的app可以驻留后台:
则首先需要检查:
1:各app的内存消耗是否正常。
需要采集下app位于前台和后台两个不同的内存消耗值,然后拿该两个内存值和同类型(比如都是天气预报app)的其他app的这两个数值做比较。
分析该app的内存占用是否有异常。(异常包括有无内存泄漏或者内存占用不合理)

异常对应处理措施:
1)app位于前台时,采集的是其最大峰值内存占用,还需要捕获到对应的app进程栈回溯上下文,辅助app开发者找到哪地方代码占内存有问题。
2)位于后台时,如果内存占用不合理,多是因为该app退到后台时,其占用的图形内存资源没有释放,需要优化该app。


2: 系统工作集的内存消耗是否正常.
android整机内存占用可以分为三大块:
系统工作集 + 用户感知app + 后台的非感知app

系统工作集内存消耗:包括adj<0的系统所有进程pss内存占用总和,还有内核态内存消耗.

这个系统工作集内存消耗具体统计上面三 测试方法里面有提到。
可以和其他的同类型(都是车载机),同软件大版本的android设备做比较,来发现其内存占用是否异常。

异常对应处理措施:
内核态除了ION heap之外,其他几项不会占内存太多,除非有内存泄漏问题出现。
ION heap可以用我这边专门工具捕获到每一块ION内存对应的线程栈回溯上下文。这样可以辅助分析哪块ION内存占用不合理。


3:后台cached级别进程是否已经被冻结,其占用的用户态内存是否已经被回收掉。
这个cached级别进程就是上面说的后台非感知app。

现在原生android14版本对cached进程是会冻结,并回收其内存资源的。
可以通过看进程栈回溯上下文,检查有无真正被冻结,另外通过dumpsys meminfo命令看其用户态占用内存是否已经被回收掉。


4:app退到后台时,除了上面提的用户感知app之外,其他app是否已经退到cached级别。

1)如果发现有没退到cached级别,但又不会被用户感知的app,则估计是该app利用了系统缺陷,做了后台优先级提升工作。
此时,需要把该app降级,并重新退到cached级别。

2)如果可感知app稍微比较多,则需要评估需要有这么多这种类型的app存在。
因为此类app多的话,影响系统内存回收,增大系统总内存占用消耗。


其次如果上面三 测试方法中的步骤3算出的系统总内存消耗和ddr总内存的差值比较大时(1G以上),
则表明在系统有比较多的可用内存时,还发生了杀后台现象。
这个是原生安卓过于重视内存性能,忽视后台驻留的一个不足缺陷,
具体原因是lmkd采用了mem psi方式杀进程,该杀进程方式比较活跃,一旦稍微有内存压力,就会杀后台进程。
需要对Lmkd做改进。


五:识别内存性能问题以及相应的优化
上面提的是优化杀后台问题,提升后台app驻留能力。
另外针对平时测试场景中的死机卡顿这些性能问题,也需要有针对性的优化方案部署。

1 卡顿测试方法:

可以在发版本之前跑monkey或者mtbf测试,并且版本要带上卡顿检测功能。

这样在跑测试时,如果有前台app操作卡顿问题,会自动输出相关的捕获log.(会有第一现场的bugreport log生成)

2 卡顿问题分析:

卡顿分必现卡顿和偶现卡顿:
必现卡顿可以通过systrace和simpleperf等性能工具,来看出卡顿原因。

偶现卡顿则需要部署卡顿检测功能,提升系统的可观测性。
该功能可以做到:
每次安卓设备端出现卡顿问题时,可以输出cpu端,io端和内存端的各自性能耗时数据(都在卡顿检测功能输出的log里面),这样可以通过数据初步知道该卡顿问题主要是cpu,io和内存这3大块哪块导致的。

如果是内存,则可以通过bugreport  log,再结合上面提升后台驻留方面的优化方法,来分析是否有内存泄漏,或者内存占用不合理等。
如果是IO,则可以通过进一步的IO打点log,来看出是存储IO栈的哪一层导致的问题,是内核层,还是存储设备端导致的问题。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构造函数注入@RequiredArgsConstructor

Api(tags "用户管理接口") RequiredArgsConstructor RestController RequestMapping("users") public class UserController {private final IUserService userService;PostMappingApiOperation("新增用户")public void saveUser(RequestBody U…

输入框输入值之后,检索表格中是否存在输入框中的值,存在就让当前文字为红色

this.searchValue为输入框的值 createKeywordHtml_content(data) { if (data undefined) { return data; } if (typeof data ! string) { data String(data) } let value data.replace(this.searchValue, <span style"color:#FF5555">$&</span>…

来一组爱胜品1133DN PRO打印机的照片

刚拆箱的机器正面照片 打开前盖正准备要安装原装耗材 下图是原装耗材&#xff0c;硒鼓型号是DR2833、碳粉盒型号是TN2833,鼓组件打印页数12000页&#xff0c;TN2833标准容量粉盒打印页数1600页/5%覆盖率&#xff0c;TN2833H大容量粉盒打印页数3000页/5%覆盖率、TN2833L超大容量…

Intel base instruction -- cvttsd2si

将截断双精度浮点数并转换为有符号整数。 4958: 8b 05 82 49 00 00 mov 0x4982(%rip),%eax # 92e0 <age_to_colorBase> // eaxgvar_92e0 495e: 48 8d 15 7b 49 00 00 lea 0x497b(%rip),%rdx # 92e0 <age_to_colorBase&g…

慢性肾脏病-MR+转录组文献

Identification of novel therapeutic targets for chronic kidney disease and kidney function by integrating multi-omics proteome with transcriptome - PMC (nih.gov) 数据和材料 Our pQTL summary data were acquired from previously published studies and can be f…

三. 根文件系统构建

根文件系统构建好以后就意味着我们已经拥有了一个完整的,可以运行的最小系统. 一. 根文件系统简介 根文件系统一般也叫做 rootfs&#xff0c;那么什么叫根文件系统&#xff1f;Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录,目录下的文件…

《妃梦千年》第二十九章:朝中波澜

第二十九章&#xff1a;朝中波澜 自从被封为护国夫人后&#xff0c;林清婉在大周的地位愈发稳固&#xff0c;她的智慧和勇气不仅赢得了皇上的信任&#xff0c;也获得了朝中众臣的敬佩。然而&#xff0c;这也引来了部分人的嫉妒和不满&#xff0c;他们开始在暗中谋划&#xff0…

AdaBoost集成学习算法理论解读以及公式为什么这么设计?

本文致力于阐述AdaBoost基本步骤涉及的每一个公式和公式为什么这么设计。 AdaBoost集成学习算法基本上遵从Boosting集成学习思想&#xff0c;通过不断迭代更新训练样本集的样本权重分布获得一组性能互补的弱学习器&#xff0c;然后通过加权投票等方式将这些弱学习器集成起来得到…

RightFont 8.7.0 Mac专业字体管理工具

RightFont 适用于 macOS 的终极字体管理器应用程序&#xff0c;提供无缝的字体管理体验。它结合了速度、直观的功能和专业的功能&#xff0c;使用户能够轻松预览、安装、组织和共享字体。 RightFont 8.7.0 Mac下载 RightFont 8.0的新增功能 RightFont 8.0 带来了全新的智能选…

【电脑应用技巧】如何寻找电脑应用的安装包华为电脑、平板和手机资源交换

电脑的初学者可能会直接用【百度】搜索电脑应用程序的安装包&#xff0c;但是这样找到的电脑应用程序安装包经常会被加入木马或者强制捆绑一些不需要的应用装入电脑。 今天告诉大家一个得到干净电脑应用程序安装包的方法&#xff0c;就是用【联想的应用商店】。联想电脑我是一点…

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍&#xff1a;05 电子计算机类比赛国奖队伍技术如何分工和学习内容 摘要 本文主要介绍了在电子计算机类比赛中技术层面上的团队分工和需要学习的内容&#xff0c;分为了嵌入式硬件、嵌入式软件、视觉图像处理、机械、上位机软件开发和数据分析等六个方向&am…

文心一言 VS 讯飞星火 VS chatgpt (299)-- 算法导论22.1 3题

三、有向图 G ( V , E ) G(V,E) G(V,E) 的转置是图 G T ( V , E T ) G^{T} (V,E^{T}) GT(V,ET)&#xff0c;这里 E T { ( v , u ) ∈ V V E^{T} \{(v,u)∈ V \times V ET{(v,u)∈VV:(u,v)∈ E}$因此&#xff0c;图 G T G^{T} GT 就是将有向图 G G G中所有边的方向反过来…

java LogUtil输出日志打日志的class文件内具体方法和行号

最近琢磨怎么把日志打的更清晰&#xff0c;方便查找问题&#xff0c;又不需要在每个class内都创建Logger对象&#xff0c;还带上不同的颜色做区分&#xff0c;简直不要太爽。利用堆栈的方向顺序拿到日志的class问题。看效果&#xff0c;直接上代码。 1、demo test 2、输出效果…

【WebGIS平台】传统聚落建筑科普数字化建模平台

基于上述概括出建筑单体的特征部件&#xff0c;本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器&#xff08;B/S&#xff09;的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现&#xff0c;允许用户轻松在线构建从…

Linux 利用命名空间创建一个自己的“容器“

Linux 利用命名空间创建一个自己的"容器" 前置条件 创建一个目录存放容器mkdir /myapp准备静态编译busybox&#xff0c;操作系统自带的往往是依赖动态库的(本文使用的debian apt install busybox-static) 开始 使用unshare起一个独立命名空间.# 进入后/myapp目录…

Python中生成随机数:一种简单而强大的方法

简介&#xff1a; 在编程中&#xff0c;我们经常需要生成随机数来模拟各种情况&#xff0c;比如游戏、统计模拟、机器学习数据集的划分等。Python通过其内置的random模块提供了一个简单而强大的方式来生成随机数。本文将介绍如何使用random模块来生成各种类型的随机数&#xff…

【RESTful】前后端的通信方式 REST

前后端的通信方式 REST 1.初识 REST1.1 什么是 REST1.2 REST 的特征 2.HTTP 方法与 CRUD 动作映射3.实现 REST 风格的 CRUD 1.初识 REST 1.1 什么是 REST REST 是软件架构的规范体系结构&#xff0c;它将 资源的状态 以适合客户端的形式从服务器端发送到客户端&#xff08;或…

小型简易GIT服务器搭建和使用

搭建GIT服务器的文章有很多&#xff0c;多数在管理的时候都使用了gitosis作为管理工具&#xff0c;但是作为一个小团队(人数少于50人)&#xff0c;我觉得完全可以使用公钥验证的方式&#xff0c;这样会简单不少&#xff0c;下面来看看简易的搭建方法吧。 服务器版本:ubuntu 16…

Unix\Linux 执行shell报错:“$‘\r‘: 未找到命令” 解决

linux执行脚本sh xxx.sh报错&#xff1a;$xxx\r: 未找到命令 原因&#xff1a;shell脚本在Windows编写导致的换行问题&#xff1a; Windows 的换行符号为 CRLF&#xff08;\r\n&#xff09;&#xff0c;而 Unix\Linux 为 LF&#xff08;\n&#xff09;。 缩写全称ASCII转义说…

第二证券:ppi指数是什么,ppi指数下降对股市有什么影响?

PPI全称Producer Price Index&#xff0c;PPI指数即“出产者价格指数”&#xff0c;反映的是一守时期内出产者购买中心产品和原材料价格的改动趋势和改动程度。 了解ppi指数&#xff1a; 简单了解便是&#xff0c;计算出出产者的本钱改动状况&#xff0c;然后反映到价格上。 …