Android的oom_adj, oom_score, oom_score_adj有什么区别
时间: 2024-06-01 12:07:28 浏览: 399
在Android系统中,oom_adj、oom_score和oom_score_adj是用来管理进程内存的参数。
oom_adj:是一个整数值,表示了进程在内存不足时的优先级。数值越小,表示进程被oom-killer杀死的概率越小。
oom_score:也是一个整数值,表示了进程所占用的内存大小和oom_adj的综合评分。数值越大,表示进程被oom-killer杀死的概率越大。
oom_score_adj:也是一个整数值,表示了进程在内存不足时的优先级。与oom_adj不同的是,oom_score_adj的取值范围为[-1000, 1000],而oom_adj的取值范围为[-17, 15]。oom_score_adj的计算公式是:oom_score_adj = oom_adj - oom_score。
因此,oom_score_adj的取值不仅与进程的oom_adj值有关,还与进程的oom_score值有关。如果进程的oom_score_adj值为负数,表示进程的优先级较高,oom-killer将会优先杀掉oom_score_adj值较大的进程。反之,如果进程的oom_score_adj值为正数,表示进程的优先级较低,oom-killer将会优先杀掉oom_score_adj值较小的进程。
相关问题
RenderThread] RenderThread invoked oom-killer: gfp_mask=0x100dc2(GFP_HIGHUSER|__GFP_ZERO), order=0, oom_score_adj=101
这是 Android 应用程序的一个 Out Of Memory (OOM) 错误。这个错误常常发生在应用程序尝试分配太多内存时,系统无法再为其分配更多内存时发生。这个错误日志中的 gfp_mask=0x100dc2(GFP_HIGHUSER|__GFP_ZERO) 意味着系统在尝试为应用程序分配内存时使用了 GFP_HIGHUSER 标志,这个标志表示要分配的内存是用户空间的高端内存。order=0 表示请求的内存大小为 2^0=1 页,oom_score_adj=101 表示这个应用程序的 OOM_SCORE_ADJ 值为 101,表示应用程序在系统内存不足时优先级较高,可能会更容易被杀死以释放内存。这个错误的解决方法包括优化应用程序内存使用、减少内存泄漏等。
V4L2DecoderThre invoked oom-killer: gfp_mask=0x2dc0(GFP_KERNEL|__GFP_NOWARN|__GFP_ZERO), order=3, oom_score_adj=-1000
这段信息看起来是一个内核级别的错误日志。其中oom-killer是Linux内核中用于处理内存不足的进程的守护进程。当系统中的可用内存不足时,oom-killer会选择一个进程并将其杀死,以释放内存。在这里,V4L2DecoderThre进程被oom-killer杀死了,原因是系统中的可用内存不足,所以内核选择了它。
这种错误通常是由于系统资源不足所致,例如内存或交换空间。您可以尝试增加系统资源,例如增加内存或交换空间,以避免这种错误的发生。
阅读全文