当前位置: 首页 > news >正文

开机可用内存分析Tip

一、开机内存简介

       开机内存指的是开机一段时间稳定后的可用内存。一般项目都会挑选同平台其他优秀竞品内存数据,这个也是衡量性能的一个重要标准。所以要进行开机内存检测,同时优化非法内存进程占用。

二、测试前期核查任务

开机内存测试前要进行测试机对比机内存核查参数。

主要有如下7类:

1.内存压缩参数ZRAM

zram压缩方法 :/sys/block/zram0/comp_algorithm
zram大小:/sys/block/zram0/disksize
swappiness:/proc/sys/vm/swappiness
direct_swappiness:/proc/sys/vm/direct_swappiness

2.kswap参数


extra_free_kbytes:/proc/sys/vm/extra_free_kbytes
min_free_kbytes:/proc/sys/vm/min_free_kbytes
watermark_boost_factor:/proc/sys/vm/watermark_boost_factor
lowmem_reserve_ratio:/proc/sys/vm/lowmem_reserve_ratio
watermark_scale_factor:/proc/sys/vm/watermark_scale_factor


3.lmk参数   

getprop | grep lmk


4.虚拟机参数    

getprop | grep heap


5.cache个数  

 dumpsys activity settings | grep CUR_MAX


6.zoneinfo    

proc/zoneinfo | grep -in -E "Node |min |low |high |managed "


7.压缩和冻结情况    

dumpsys activity settings |grep -e use_compaction -e use_freezer

三、开机内存检测

1.测试步骤

刷机后默认跳过开机向导,设置为新手机,不插卡,不联网,手机默认状态下,亮度调节最大,关闭自动背光,清理状态栏通知和后台应用。下面三个要注意:

1)开机时间要舍弃前面1-3次数据。

2)如果状态栏有其他通知,除了要清理通知,还要重启一次。

3)看下多任务里面是否还有其他后台任务,有的话要清理掉。

2.不同DDR 可用内存建议标准

目前开机内存指标为MemAvaiable MemAvaiable ~MemFree+Buffers+Cached+IonTotalCache

不同内存有不同开机内存标准值:建议值(一般达不到,除非是driveronly原生系统)

6+64:可用内存建议参考值:2.5G

6+128:可用内存建议参考值:3.9G

8+256:可用内存建议参考值:5.4G

3.开机内存测试数据来源以及对应含义

数据由指令 adb shell cat proc/meminfo 获取
1)Mem_Free -----系统空闲内存
取值:MemAvailable
2)Zram-----ZRAM交换空间大小
取值:SwapTotal - SwapFree
3)Kernel Used-----Kernel使用内存大小
取值:SUnreclaim + KernelStack + PageTables + Shmem + VmallocUsed
4)IonTotalUsed-----Ion使用大小
取值:IonTotalUsed
5)GPUTotalUsed-----GPU使用内存大小
取值:GPUTotalUsed
6)Platform Reserved-----平台预留内存
取值:总内存 – MemTotal

meminfo中对应PSS 进程大小,Android系统有同意的内存管理策略,lmk基于进程优先级进行进程查杀,值越小优先级越高。

四、开机内存数据处理分析

主要还是从下面Mem_Free、Zram、Kernel Used、IonTotalUsed、GPUTotalUsed、Platform Reserved参数进行对比,尤其是meminfo中个进程的内存占用大小对比。

SystemRam 划分为两个部分,PlatformReserved和MemTotal,MemTotal是系统能自由分配使用内存大小。MemTotal主要包括kernel use,free 和user space。内存差异主要体现在PlatformReserved、kernel use、user space。

1.Platform_Reserved

Platform_Reserved差异就是MemoryTotal差异。Platform_Reserved = 实际物理内存 - MemTotal,需要分别解析出对比机和测试机的模块预留,通过对比可以看出是否有新增的模块或是内存占用明显变化的模块。由于这部分内存与硬件设备强相关,我们需要向高通或MTK提case咨询能否去除。

2.kernel used 

kernel used = Shmem+SUnreclaim+KernelStack+PageTables+VmallocUsed这部分差异给BSP进行拆解

SReclaimable: slab 中可回收的部分,调用 kmem_getpages()时加上SLAB_RECLAIM_ACCOUNT 标记,表明是可回收的,计入 SReclaimable,否则计入 SUnreclaim。
SUnreclaim: slab 中不可回收的部分。
Slab: slab 中所有的内存,等于以上两者之和。数据来源:cat /proc/meminfo

3.kernel stack

每一个用户线程都会分配一个 kernel stack(内核栈),每个线程内核栈大小:16KB,KernelStack 的大小完全由系统中的线程数决定。该值增大一般是进程或线程数增多。 KernelStack = 线程数* 16KB
统计值是 /proc/meminfo 中的 KernelStack 。有两种情况会导致 KernelStack 增大:
1) 新增了进程;
2) 同一个进程线程数增多; 
分析方法:找到新增的进程,找到线程增多的进程

4.VmallocUsed

VmallocUsed 值中,具体分布可以从/proc/vmallocinfo 中的 vmalloc 记录看到。
/proc/vmallocinfo 中能看到 vmalloc 来自哪个调用者(caller),这个调用者也是定位是哪个模块调用的关键信息。
通过 vmalloc 分配的内存,通过命令
adb shell cat /proc/vmallocinfo > vmallocinfo.txt 都可以抓取到详细的分配信息,且通过如下命令
grep vmalloc /proc/vmallocinfo | awk '{total+=$2}; END {print total}' 可以计算通过 vmalloc 分配总共分配了多大的内存。

5.Userspace

Userspace的内存是所有的进程(包括java层以及native层)的内存使用量之和,在内存占用中体现为匿名页占用+Zram占用。Zram用量一般为swap用量的1/3,即(Swaptotal-swapfree)/3。

建议差异分析其他问题点

1.手机分辨率、屏幕密度。720P和1080P对于带图片的应用比如桌面、systemui、相机、相册等是有影响的,所以排查进程差异时,需要考虑在内,可以设置相同分辨率后再比较
2.GMS包是否都存在以及其版本是否一样。升级项目一般会因为GMS包版本跨度大导致进程差异较大
3.排查不应该自启动的进程,或者可以不需要自启动的应用
4.属于自启动,但内存占用过多,找对应模块负责人分析

相关文章:

开机可用内存分析Tip

一、开机内存简介 开机内存指的是开机一段时间稳定后的可用内存。一般项目都会挑选同平台其他优秀竞品内存数据,这个也是衡量性能的一个重要标准。所以要进行开机内存检测,同时优化非法内存进程占用。 二、测试前期核查任务 开机内存测试前要进行测试机…...

【Python基础】4. 基本语句

文章目录 注释(Comment)解释伴随行文本编码问题 输入输出语句(Input & Output)输出语句普通输出格式化输出(3种)format 格式总结 输入语句 基本语句if 语句match 语句(Python3.10 新增&…...

兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮

区块链本身不仅崇尚去中心化,同时也崇尚公开透明,虽然这正在让 DAO 治理等变得更加公平,但它同时也是一把双刃剑,个人交易者尤其是一些巨鲸交易者的所以链上交易都被公之于众,这似乎并不是他们想要的结果。 所以从加密…...

TCP端口崩溃,msg:socket(): Too many open files

一、现象 linux系统中运行了一个TCP服务器,该服务器监听的TCP端口为10000。但是长时间运行时发现该端口会崩溃,TCP客户端连接该端口会失败: 可以看到进行三次握手时,TCP客户端向该TCP服务器的10000端口发送了SYN报文,…...

基于Laravel 5.6的运动健身类小程序前后端源码

基于Laravel 5.6的运动健身、健康类小程序前后端源码,一套比较基础的运动健康、健身类小程序源码。朋友自己无聊写的,比较基础,有需要的可以拿去修修改改升级开发一下。 使用宝塔安装,比较省事,PHP相关的扩展需要启用…...

NodeMCU ESP8266硬件开发板的熟悉

文章目录 硬件开发环境的熟悉基础介绍什么是 ESP8266 NodeMCU?NodeMCU芯片ESP12-E 模组开发板 ESP8266 版本引脚图Power GND I2CGPIOADCUARTSPIPWMControl 总结 硬件开发环境的熟悉 基础介绍 什么是 ESP8266 NodeMCU? ESP8266是乐鑫开发的一款低成本 …...

计算机毕业设计 基于SSM的在线预约导游系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

Mac 挂载 Alist网盘

挂载服务器的Alist 网盘到 Mac mac,使用的是 CloundMounter 这个软件进行挂载 http://ip:port/dav/ 需要在末尾加上 /dav/ 在一些服务器上,为了提供WebDAV服务,需要在URL地址的末尾添加"/dav/“。这是因为WebDAV协议规定了一些标准的URL路径&#x…...

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文…...

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 (1)修改Makfile.sdk (2)设置环境变量 (3)编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…...

将二叉搜索树转化为排序的双向链表

链接: ​​​​​​LCR 155. 将二叉搜索树转化为排序的双向链表 题解: /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val _val;left NULL;right NULL;}Node(int _val, Node* _left…...

电脑dll丢失应该怎么解决,dll文件丢失怎么恢复方法分享

DLL(Dynamic Link Library,动态链接库)是一种可执行文件,它包含了在程序运行时需要调用的代码和资源。DLL 文件的主要作用是实现代码和资源的共享,这样在多个程序之间就可以避免重复的代码和资源,从而节省系…...

通达信和同花顺能否实现程序化自动交易股票,量化交易如何实现?

以下写给正在寻找自动交易接口的朋友,首先,不是那种设置个简单条件的条件单,或者某些客户端上形同鸡肋的策略交易,那些策略根本称不上策略,还有各种限制,不支持这个不支持那个,可设置的参数也不…...

基于Kylin的数据统计分析平台架构设计与实现

目录 1 前言 2 关键模块 2.1 数据仓库的搭建 2.2 ETL 2.3 Kylin数据分析系统 2.4 数据可视化系统 2.5 报表模块 3 最终成果 4 遇到问题 1 前言 这是在TP-LINK公司云平台部门做的一个项目,总体包括云上数据统计平台的架构设计和组件开发,在此只做…...

Linux CentOS7 vim寄存器

计算机中通常所说的寄存器Register一般指的是CPU中的寄存器,用来暂存CPU处理所需要的指令、数据等。 vim中同样也有寄存器,使用的方式和CPU非常类似。 vim中的寄存器(register)作用和windows中的剪切板类似,不过vim中的寄存器不止一个&…...

摄影后期图像编辑软件Lightroom Classic 2023 mac中文特点介绍

Lightroom Classic 2023 mac是一款图像处理软件,是数字摄影后期制作的重要工具之一,lrc2023 mac适合数字摄影后期制作、摄影师、设计师等专业人士使用。 Lightroom Classic 2023 mac软件特点 高效的图像管理:Lightroom Classic提供了强大的图…...

一种4g扫码付费通电控制器方案

之前开发了一款扫码付款通电控制器 功能:用户扫码付款后设备通电,开始倒计时,倒计时结束后设备断电,资金到账商家的商家助手里面,腾讯会收取千分之6手续费。 产品主要应用场景 本产品主要应用于各类无人值守或者自助…...

桌面自动化工具总结

引言:产品经理提出桌面程序需要自动化的测试,避免繁琐的人肉点击。说干就干。 现有自动化工具是五花八门,我找了两个框架。 这两个框架都是基于微软的UIA 框架,链接地址 https://learn.microsoft.com/en-us/windows/win32/winauto/uiauto-providerportal?source=recommen…...

Python入门教程 | Python 常用标准库概览

Python3 标准库概览 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,使用标准库我们可以让您轻松地完成各种任务。 以下是一些 Python3 标准库中的模块: os 模块:os 模块提供了许多与操作系统交互的函数,例如创…...

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题,使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据,需要架设本地服务器,本文不做阐述。 概述 1、json在本地,并不需要从服务器下载。 2、采用jquery…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...