原生冻结进程分析(U)

news2024/12/25 12:39:17

一、概要

1.定义: 当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。这项功能可以减少活跃缓存应用在后台存在时所消耗的 CPU 资源,从而达到节电的目的。当应用再次切换到前台时,系统会将该应用的进程解冻,以实现快速启动。
2.作用:
  • 进程的执行被暂停:冻结的进程会被暂停,其所有线程的执行将被停止,包括应用程序的主线程以及任何后台线程。
  • 资源释放:冻结进程占用的资源,例如 CPU 和内存,会被释放。这些资源将被系统重新分配给其他需要执行的进程或系统服务。
  • 电池节省:冻结进程不会在后台运行,因此可以节省设备的电池消耗。对于后台的应用程序,冻结可以降低其电池使用量,延长设备的电池寿命。
  • 系统稳定性:通过冻结不活跃或低优先级的进程,可以避免它们竞争系统资源,从而提高系统的稳定性和响应能力。
  • 快速恢复:冻结的进程可以快速恢复其执行状态。当需要重新激活进程时,系统可以迅速将其恢复到之前的运行状态,而无需重新启动或加载应用程序。
3.挂起进程的方式
冻结是不分配cpu资源,也即进程挂起。
1)通过信号暂停进程
# 在另一个终端上发送信号。
kill -SIGSTOP 16690 # 发送信号任务给进程ID16690暂停
kill -SIGCONT 16690 # 发送信号任务给进程ID16690恢复
2)通过shell命令
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
//检查是否冻结
adb shell cat /dev/freezer/frozen/cgroup.procs
adb shell cat /sys/fs/cgroup/uid_{应用UID}/cgroup.freeze
adb logcat | grep -i "\(freezing\|froze\)"

整体架构流程

提示:这里可以添加技术整体架构
例如:
在语言模型中,编码器和解码器都是由一个个的 Transformer 组件拼接在一起形成的。

技术名词解释

提示:这里可以添加技术名词解释
例如:
  • Bert
  • GPT 初代
  • GPT-2
  • GPT-3
  • ChatGPT

技术细节

提示:这里可以添加技术细节
例如:
  • API
  • 支持模型类型
进程的OOM_ADJ (Out of Memory Adjustment)值除了决定系统内存不足的时候是否回收该进程,进程冻结策略也是依赖它去计算的。有下面的这些场景会触发进程oom adj值的重新计算,大概有切换Activity、启动广播、绑定服务、是否可见状态改变等:
1.冻结流程
  • Activity destroy的时候在ActivityRecord.setState里面就会去更新进程状态,更新进程状态的时候就会更新oom adj:
  • 进程oom adj值的重新计算最终会去到OomAdjuster.applyOomAdjLSP,在里面就会调用updateAppFreezeStateLSP去更新进程的进程冻结状态:
  • 进程oom adj值的重新计算最终会去到OomAdjuster.applyOomAdjLSP,在里面就会调用updateAppFreezeStateLSP去更新进程的进程冻结状态:
  • freezeAppAsyncLSP里面会post一个10分钟的message在时间到了的时候去冻结进程(就是10分钟之后调用Process.setProcessFrozen):
总结一下就是,如果进程的oom adj大于CACHED_APP_MIN_ADJ,就会启动一个10分钟的定时器,在10分钟之内如果进程的oom adj一直没有变回小于CACHED_APP_MIN_ADJ就会冻结进程。
2.解冻流程
  • Activity start的时候在ActivityRecord.setState里面就会去调用WindowProcessController.updateProcessInfo更新进程状态,更新进程状态的时候就会更新oom adj:
  • 最终也是会去到OomAdjuster.updateAppFreezeStateLSP,调用链路在上面的冻结流程里面已经追过,这里就省略了。可以看到如果adj小于CACHED_APP_MIN_ADJ就会调用CachedAppOptimizer.unfreezeAppLSP进行解冻:
  • 最终去到CachedAppOptimizer.unfreezeAppInternalLSP里面,如果还在10分钟的后悔时间里面就直接removeMessages删除定时器,如果进程已经冻结了就调用Process.setProcessFrozen解冻进程(frozen参数传入false)

小结

提示:这里可以添加总结
例如:
提供先进的推理,复杂的指令,更多的创造力。

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

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

相关文章

Nginx安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

NASA数据集:ASTER全球数字海拔模型(GTEM)V003

ASTER Digital Elevation Model V003 简介 ASTER全球数字海拔模型(GTEM)第3版(ASTG TM)提供了地球陆地区域的全球数字海拔模型(TEM),空间分辨率为1角秒(赤道处水平位置约30米&…

k8s集群环境搭建(一主二从--kubeadm安装)

前置条件 版本:CentOS Linux release 7.5.1804 (Core) 内存:2G CPU:2 主机名解析 vim /etc/hosts 192.168.109.100 master 192.168.109.101 node1 192.168.109.102 node2时间同步,这里直接使用chronyd服务从网络同步时间syste…

企业产品推广系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,活动资讯管理,产品分类管理,产品信息管理,用户分享管理,留言板管理,系统管理 微信端账号功能包括:系统首页…

C语言 | Leetcode C语言题解之第388题文件的最长绝对路径

题目: 题解: #define MAX(a, b) ((a) > (b) ? (a) : (b))int lengthLongestPath(char * input){int n strlen(input);int pos 0;int ans 0;int * level (int *)malloc(sizeof(int) * (n 1));memset(level, 0, sizeof(int) * (n 1));while (po…

LabVIEW电机多次调用

在LabVIEW中,为实现对多个电机的独立控制,工程师可以采用可重入VI、动态VI调用、多任务结构或面向对象编程等方法。每种方法都有其优点和适用场景,选择合适的方法能有效提升系统的性能和可维护性。 在LabVIEW中,如果需要多次调用…

WPF 手撸插件 六 消息总线

虽然暂时不知道该如何将消息总线集成到插件系统中,但是让我先学习起来吧,本文主要来说说我最近学习的Reface.EventBus Reface.EventBus有两个版本,分别支持.Net Framework和 .Net Core。 我们这里先说支持.Net Framework的版本,…

007.Python爬虫系列_初识爬虫

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

javaSSMmysql宠物领养系统的设计与实现26292-计算机毕业设计项目选题推荐(附源码)

摘 要 如今,随着人们生活水平不断提高,人们的生活在物质满足的基础上,更多的人将生活的重点放在追求精神享受的过程中。于此同时,Internet铺天盖地的普及,使得这样的人纷纷通过Internet的方式去寻找精神的满足。然而领…

java+Springboot+mysql小区维修管理平台41866-计算机毕业设计项目选题推荐(免费领源码)

摘 要 随着计算机技术的飞速发展,计算机在小区维修管理中应用的普及,利用计算机在实现小区维修的管理势在必行。当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。从而使我们从繁杂的事务中解放出来,提高了我们的工作效率。目前…

Web入门-06.HTTP协议-协议解析

浏览器发起HTTP协议请求,服务端通过ServerSocket接收并交给一个Socket对象(管道),然后解析浏览器的请求,并通过Socket管道向浏览器响应。 代码如下: package com.gjw;import java.io.*; import java.net…

学习之git的常用命令

git常用命令 设置用户签名 基本语法: 1.1 git config --global user.name 用户名 1.2 git config – global user.email 邮箱 1.3 cat ~/.gitconfig 1.4 git init 初始化本地库 在D盘新建一个文件夹—进入文件夹–右键–点击(open git base here) …

低代码技术新趋势——逆向工程

低代码的下一个趋势,应该是“逆向工程”,用户可以通过 可视化界面,逆向输出全栈工程代码。而标准的工程代码同样可以编译为支持可视化分析、编辑、调整的“无代码”程序。前一个是解释性语言向编译性语言的逆向工程。后者则是一个理论实践应用…

华为OD机试真题 - 跳马 - 广度优先搜索BFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、…

Java SpringBoot Vue开发的公司单位考勤管理系统,一键导出考勤数据,智能分析员工出勤,提高管理效率

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

IEEE PDF eXpress 报错解决 Error in converting file + font not embedded

IEEE PDF eXpress 报错解决方法 1. Error in converting file解决方法(1)直接使用 Manual Request(2)查看报错信息并修改 2. 报错信息为:font xxx not embedded解决方法:在pdf中嵌入字体 1. Error in conve…

codeforce一半空白?怎么解决

codeforces界面问题,有一半是空白 如图: 下拉到底,点击desktop version即可 这样就好了

鸿蒙界面开发(12):选项卡布局(Tabs)

选项卡布局(Tabs) 当页面信息较多时,为了让用户能够聚焦于当前显示的内容,需要对页面内容进行分类,提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换。 基本布局 Tabs组件的页面组成包含两个部分,分别是Ta…

数据结构(邓俊辉)学习笔记】串 17——Karp-Rabin算法:散列

文章目录 1.数位溢出2.散列压缩3.应对冲突4.指纹更新 1.数位溢出 在前一节中,已经成功地完成了一次视角转换,了解到应该如何从数学上将每一个串视作为一个自然数。以下我们就来将这一构思具体的兑现为一个算法。很有意思的是,我们在此需要用到…

qt4.8.7编译中出现const void* 禁止转换为void *

编译错误 错误忘截图&#xff0c;大概是如下头文件的问题&#xff1a; 该文件中的这一段函数报了如图所示的错误&#xff1a; // Test and set for pointerstemplate <typename T> Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expecte…