锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

(一)LMK简介

时间:2022-10-31 15:00:00 lmk307液位传感器

1、概述

LMK (low meminfo killer) 即使系统内存过低,系统也会触发LMK,杀死一些释放内存的过程。android 会为进程分配优先级,优先级越低的应用,在内存不足时,会优先被杀。优先级与进程的类型和进程被调度的次序有关系。

2、优先级

android 过程优先级(从高到低)

前台进程,活动Activity或者使用startForeground的Service。onReceive 的BroadcastReceiver 等
例如,可见过程 onPause 的Activity
服务流程,后台服务,如运营startService 启动的service
后台过程对用户交互没有影响onStop状态的Activity 等
空过程通常用作缓存,以缩短下次启动时间

而LMK 则是根据oom_adj(Out of Memory Adjustment)设置,和android 优先级有相似之处,但不完全相同

ADJ级别

取值

解释

UNKNOWN_ADJ 16 一般来说,缓存过程,无法获得确定值
CACHED_APP_MAX_ADJ 15 看不见进程adj最大值 1
CACHED_APP_MIN_ADJ 9 看不见进程adj最小值 2
SERVICE_B_AD 8 B List中的Service(使用老的可能性较小)
PREVIOUS_APP_ADJ 7 上一个App过程(通常按返回键)
HOME_APP_ADJ 6 Home进程
SERVICE_ADJ 5 服务进程(Service process)
HEAVY_WEIGHT_APP_ADJ 4 后台的重量级过程,system/rootdir/init.rc文件中设置
BACKUP_APP_ADJ 3 备份进程
PERCEPTIBLE_APP_ADJ 2 可感知过程,如后台音乐播放
VISIBLE_APP_ADJ 1 可见进程(Visible process)
FOREGROUND_APP_ADJ 0 前台进程(Foreground process) 6
PERSISTENT_SERVICE_ADJ -11 关联系统或persistent进程
PERSISTENT_PROC_ADJ -12 系统persistent进程,比如telephony
SYSTEM_ADJ -16 系统进程
NATIVE_ADJ -17 native过程(无系统管理)

LMK进程内存释放是根据当前可用的内存情况进行的,总设计了粗线,即LMK杀戮过程的6档,如下:

  1. CACHED_APP_MAX_ADJ
  2. CACHED_APP_MIN_ADJ
  3. BACKUP_APP_ADJ
  4. PERCEPTIBLE_APP_ADJ
  5. VISIBLE_APP_ADJ
  6. FOREGROUND_APP_ADJ

当系统内存不足时,LMK也会从CACHED_APP_MAX_ADJ(第一档)开始杀戮过程,如果内存不足,就会杀戮CACHED_APP_MIN_ADJ(二档),以此类推。

3、adj

那系统如何判断内存不足呢?

根据这6档设置相应的内存值,每个系统都不一样,可以自定义

android 9 及以下

需要注意的是,这里的单位不是KB,而是page(1 page = 4KB), 换算逻辑是(X / 1024 * 4)M

cat /sys/module/lowmemorykiller/parameters/minfree

18432,23040,27648,32256,55296,80640

cat /sys/module/lowmemorykiller/parameters/adj

0,100,200,300,900,906


adj 上面16-17没有显示 取值,但另一套更大范围的值。这样可以进一步细化过程的优先级,对每个过程进行排序。

LMK 该机制将对每个应用程序的内存进行评分。当内存不足时,将首先对高分应用程序进行评分kill,所以oom_score_adj (下见 cat /proc/pid/oom_score_adj)是另一种形式adj,比adj 更加细分。

android 10

getpropsys.lmk.minfree_levels

了解当前阀值列表后,还需要检查当前应用程序的相应位置。

查看单个应用的优先级

cat /proc/pid/oom_adj

cat /proc/pid/oom_score_adj

以oom_score_adj为准

查看当前系统应用优先顺序

dumpsys activity o

dumpsys activity|grep -A 30 oom_adj (目前大约有20个进程排列,因此过滤显示30行,并非所有进程都会进入排列,dumpsys activity processes 还有相关信息,关键词 sorted by oom_adj)

也可以通过dumpsys meminfo 检查排列,但在同一级别优先级可能没有按顺序(实际测试时要注意)

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章