lowmemorykiller 的日志查询

本文介绍如何通过查询lowmemorykiller日志来诊断系统卡顿问题。以com.su.download为例,展示了不同日志文件中关于该应用被系统内存管理器终止的相关记录,包括kernel_log、main_log、events_log及sys_log。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 lowmemorykiller 的日志查询

系统卡顿优化往往会触发lowmemorykiller,查看应用是否被lowmemorykiller的日志,一般需要查询对应包名对应的pid

例如 com.su.download pid 是16826,目前pid一般可以在event日志查看到

1.1 kernel_log_6__2018_0614_191444
13,845: <7>[  404.507273] -(6)[97:kswapd0][signal][97:kswapd0]send death sig 9 to[16826:redstone.ota.ui:R] 
13,846: <6>[  404.507319]  (6)[97:kswapd0]lowmemorykiller: Killing 'redstone.ota.ui' (16826), adj 904, state(0)
1.2 main_log_1__2018_0614_191444

76,496: 06-14 18:56:32.305074 1005 1023 I zygote64: Successfully killed process cgroup uid 1000 pid 16826 in 0ms

1.3 events_log_3__2018_0614_191444

4,202: 06-14 18:56:32.303401 1005 1404 I am_proc_died: [0,16826,com.su.download,904,11]

1.4 sys_log_4__2018_0614_191444
06-14 18:56:32.293532  1005  6176 I WindowManager: WIN DEATH: Window{e5030bc u0 com.su.download/com.su.download.activity.RsMainActivity}
06-14 18:56:32.303128  1005  1404 I ActivityManager: Process com.su.download (pid 16826) has died: cch+4SVC 
06-14 18:56:32.303719  1005  1404 W ActivityManager: Scheduling restart of crashed service com.su.download/com.globe.android.stats.agent.AgentService in 16262ms
06-14 18:56:32.303882  1005  1404 W ActivityManager: Scheduling restart of crashed service com.su.download/com.android.meteor.agent.library.AgentService in 26262ms
<think>好的,用户想了解关于Android的lowmemorykiller内存管理以及如何调整参数,特别是提到了adj值为1001、file_cache为225528、free内存34551的情况。我需要先理清lowmemorykiller的基本机制,然后结合用户提供的参数进行分析。 首先,根据引用[1],lowmemorykiller通过minfree和adj参数来管理内存。minfree定义了不同内存阈值,adj对应进程的优先级,当内存低于某个minfree值时,会杀掉对应adj或更高adj的进程。用户提供的adj是1001,但通常adj的范围是0到906,如引用[3]中的例子adj是0,100,200,300,900,906。这里可能存在疑问,用户的adj值1001是否超出了常规范围?需要确认是否可能或者是否存在错误。 然后,用户提到file_cache为225528和free内存34551,单位应该是KB吧?需要说明这些数值的意义。file_cache可能指系统缓存,而free是剩余内存。当free降到某个minfree阈值时,lowmemorykiller会被触发。用户可能想知道如何根据当前内存状态调整minfree和adj参数,以防止特定进程被杀死,比如引用[2]中提到的应用保活。 接下来,需要解释参数调整方法。比如修改/sys/module/lowmemorykiller/parameters下的minfree和adj文件,但需要注意参数的数量匹配。同时,引用[2]提到在lmkd.cpp中修改逻辑,可能涉及白名单机制,防止某些app被杀。这可能适用于高级用户或系统开发者。 用户的问题可能还涉及如何根据当前内存情况调整参数,比如adj设为1001是否有效,是否需要扩展adj的范围,或者调整minfree的阈值以适应更高adj值。此外,需要提醒用户修改这些参数的风险,比如系统不稳定或功耗增加。 最后,生成相关问题时,需要考虑用户可能的后续疑问,比如如何监控lowmemorykiller行为,或者在不同Android版本中的差异,以及保活策略的其他方法。</think>### Lowmemorykiller 内存管理机制与参数调整方法 #### 一、Lowmemorykiller 内存管理原理 Lowmemorykiller 是 Android 系统中用于在内存不足时主动终止低优先级进程的机制。其核心参数包括: 1. **adj 值**:表示进程优先级,数值越大优先级越低(越容易被终止)[^1]。 2. **minfree 值**:定义内存阈值,单位为页(通常 1 页=4KB)[^1]。例如: ```bash $ adb shell cat /sys/module/lowmemorykiller/parameters/minfree 18432,23040,27648,32256,55296,80640 # 对应内存级别 72MB,90MB,108MB,126MB,216MB,315MB ``` 3. **触发规则**:当系统剩余内存(`free`)低于某个 `minfree` 阈值时,终止对应 `adj` 或更高值的进程[^1]。 #### 二、参数解析与调整方法 针对您提到的参数组合 `adj:1001`、`file_cache:225528`、`free:34551`: 1. **adj 值异常分析** - 常规 `adj` 范围是 `0~906`(如引用[3]示例),`1001` 可能表示自定义扩展的优先级层级,但需确认系统是否支持该范围。 - **调整建议**:若需保留进程,应设置更低的 `adj` 值(如 `<100`),并确保与 `minfree` 参数数量匹配。 2. **内存状态解读** - `file_cache:225528`:系统缓存占用的内存(约 881MB) - `free:34551`:可用内存约 135MB(34551×4KB) - **判断逻辑**:若当前 `minfree` 阈值包含 `135MB` 级别,则会触发对应 `adj` 层级的进程终止。 3. **参数调整步骤** ```bash # 修改 adj 和 minfree(需 root 权限) echo "0,100,200,300,900,906,1001" > /sys/module/lowmemorykiller/parameters/adj echo "18432,23040,27648,32256,55296,80640,92160" > /sys/module/lowmemorykiller/parameters/minfree ``` - 需保证 `adj` 与 `minfree` 参数数量一致 - 新增 `92160`(360MB)对应 `adj:1001`,表示当内存低于 360MB 时才会终止该层级进程 #### 三、进程保活高级方法(引用[2]) 1. **修改 lmkd 源码** 在 `/system/memory/lmkd/lmkd.cpp` 中添加进程白名单,绕过终止逻辑: ```cpp static bool is_protected(const char* process_name) { const char* protected_apps[] = {"com.example.app"}; for (auto& app : protected_apps) { if (strcmp(process_name, app) == 0) return true; } return false; } ``` 2. **调整 OOM_SCORE_ADJ** 通过修改进程的 OOM 评分实现保活: ```bash echo -1000 > /proc/<pid>/oom_score_adj # 最低优先级(最不易被终止) ``` #### 四、监控与验证 1. **实时内存状态** ```bash adb shell dumpsys meminfo | grep "Free RAM" ``` 2. **进程终止日志** ```bash adb logcat | grep "lowmemorykiller" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值