Android adj

adj进程优先级代表了内存不足时,lmk kill进程优先级,cat proc/pid/oom_score_adj 查看

bindService双向bind的进程,一个进程nice继承最高的nice,导致另外一个app 无法被系统冰冻(adj 大于等于 CACHED_APP_MIN_ADJ(900)的时候,进程就会变成Cached,然后就会进入到Freezer模式)例如:实现双向通讯会把app优先级adj提升到200(capservice是-800),导致app在后台无法

进程adj过高,什么原因导致?adb shell am watch-uids --oom 可以查看为啥oomAdj被提升了(

adb shell am start -a android.settings.SETTINGS 打开开发者模式才行)

Android 系统中,`minfree` 和 `adj` 与低内存杀死(Low Memory Killer,LMK)机制相关。`minfree` 是不同重要性的进程在内存不足时的最小保留内存,而 `adj` 即 `OOM_ADJ` 值,表示进程的重要性,值越低越重要,越不容易被杀死[^2]。 获取 `minfree` 和 `adj` 的方法如下: #### 获取 `minfree` `minfree` 值通常存储在 `/sys/module/lowmemorykiller/parameters/minfree` 文件中,可以通过 `adb shell` 命令来读取该文件内容: ```bash adb shell cat /sys/module/lowmemorykiller/parameters/minfree ``` 此命令会输出一组逗号分隔的数值,每个数值代表不同内存阈值下的最小保留内存。 #### 获取 `adj` `adj` 值存储在每个进程对应的 `/proc/<pid>/oom_adj` 或 `/proc/<pid>/oom_score_adj` 文件中,其中 `<pid>` 是进程的 ID。可以通过以下步骤获取: 1. 查找目标进程的 PID。可以使用 `adb shell ps` 命令列出所有进程,然后找到目标进程的 PID。 ```bash adb shell ps | grep <process_name> ``` 将 `<process_name>` 替换为目标进程的名称。 2. 获取该进程的 `oom_score_adj` 值: ```bash adb shell cat /proc/<pid>/oom_score_adj ``` 将 `<pid>` 替换为上一步中查找到的进程 ID。 ### 示例代码 以下是一个简单的 Python 脚本,用于自动获取指定进程的 `oom_score_adj` 值: ```python import subprocess # 目标进程名称 process_name = "com.example.app" # 获取目标进程的 PID ps_output = subprocess.check_output(['adb', 'shell', 'ps']).decode('utf-8') lines = ps_output.split('\n') pid = None for line in lines: if process_name in line: parts = line.split() pid = parts[1] break if pid: # 获取该进程的 oom_score_adjadj_output = subprocess.check_output(['adb', 'shell', 'cat', f'/proc/{pid}/oom_score_adj']).decode('utf-8') print(f"Process {process_name} (PID: {pid}) oom_score_adj: {adj_output.strip()}") else: print(f"Process {process_name} not found.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值