当前位置: 首页 > 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…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...