首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 进程保活】oom_adj 值 ( oom_adj 值对应的进程优先级 | oom_adj 值动态改变 | 进程保活优化方向 )

文章目录 一、oom_adj 值对应的进程优先级 二、oom_adj 值动态改变 1、正常运行时的 oom_adj 值 2、按下 Home 键后的 oom_adj 值 3、按下回退键后的 oom_adj...值 二、进程保活优化方向 一、oom_adj 值对应的进程优先级 ---- oom_adj 值对应的进程优先级 : 优先级从上到下越来越高 , 最下面的优先级最高 , 最上面的优先级最低 ; UNKNOWN_ADJ...= 16 : 缓存进程 ; CACHED_APP_MAX_ADJ = 15 : 不可见进程的 oom_adj 最大值 ; CACHED_APP_MIN_ADJ = 9 : 不可见进程的 oom_adj...值动态改变 ---- 1、正常运行时的 oom_adj 值 一个程序的 oom_adj 值是不断动态改变的 , 当程序处于前台时 , 该前台进程的 oom_adj 的值为 0 , 运行程序 , 在...的 oom_adj 值为 12 , 不可见进程范围是 9 ~ 15 , 此时的状态是不可见状态 ; 3、按下回退键后的 oom_adj 值 如果是按下回退键退出界面 , 此时查询该

1.8K40

【Android 进程保活】oom_adj 值 ( 简介 | 查询进程 PID | 根据进程 PID 查询 oom_adj 值 )

文章目录 一、oom_adj 值简介 二、查询进程号 PID 三、查询进程对应的 oom_adj 值 一、oom_adj 值简介 ---- oom_adj 值是 Linux 内核为每个进程分配的 , 该值可以反映进程的优先级...; 在内存不足 , 要杀进程 , 回收内存时 , 会根据该 oom_adj 值决定是否回收该进程 ; oom_adj 值越大 , 对应的进程优先级越低 ; 二、查询进程号 PID ---- 获取进程号...值 ---- 获取进程号之后 , 执行如下命令 , 即可查询进程号对应进程的 oom_adj 值 ; 首先进入 Android 设备 adb shell 命令行 , adb shell 然后获取 root...权限 , su 最后查询进程号对应进程的 oom_adj 值 ; cat /proc/11694/oom_adj 最终查询的该进程的 oom_adj 值为 0 , 说明该进程当前处于前台 , 是前台进程...; 查下企鹅的三个进程的 oom_adj 值 : u0_a295 12420 725 4532232 92244 0 0 S com.tencent.mm

5.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux OOM机制分析

    OOM分析 oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存...oom_score_adj,因此系统管理时建议设置/proc//oom_score_adj,内核依然保持oom_adj设置以兼容旧版本,系统中对oom_score_adjoom_adj中任一个进行设置...,内核中都会进行两者之间的相互转换,转换关系如下: 2.6(Centos6) oom_score_adj=(oom_adj*1000)/17 oom_adj= (oom_score_adj*15)/1000...当设置oom_adj=-16时,oom_score_adj自动调整为-941 当设置oom_score_adj=-950时,oom_adj自动调整为-14 3.10(Centos7) oom_score_adj...= (oom_adj*1000)/17 oom_adj=(oom_score_adj*17)/1000 当设置oom_adj=-16时,oom_score_adj自动调整为-941 当设置oom_score_adj

    8.3K93

    Linux OOM一二三

    Linux开发一般会遇到“/proc/sys/vm/overcommit_memory”,即文件/etc/sysctl.conf中的vm.overcommit_memory,Overcommit的意思如同其字面意思...overcommit_memory有三种取值(注:overcommit_memory并不控制OOM,是否开启OOM由panic_on_oom控制): overcommit_memory取值 含义 0...系统是否行使OOM,由/proc/sys/vm/panic_on_oom的值决定,当/proc/sys/vm/panic_on_oom取值为1时表示关闭OOM,取值0时表示启用OOM。...如果将/proc/sys/vm/oom_kill_allocating_task的值设置为1,则OOM时直接KILL当前正在申请内存的进程,否则OOM根据进程的oom_adjoom_score来决定。...oom_adj表示进程被OOM KILLER杀死的权重,取值“17~15”,值越大被KILL的概率越高,当进程的oom_adj值为-17时,表示永远不会被OOM KILLER选中。

    1.6K20

    linux OOM killer分析

    基本概念 Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉...我们先来看一下kernel提供给用户态的/proc下的一些参数: /proc/[pid]/oom_adj ,该pid进程被oom killer杀掉的权重,介于 [-17,15]之间,越高的权重,意味着更可能被.../proc/[pid]/oom_score,当前该pid进程的被kill的分数,越高的分数意味着越可能被kill,这个数值是根据oom_adj运算后的结果,是oom_killer的主要参考。...] [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name Apr 18 16:56:18 v125000100.bja...killer选中的概率,禁止或者给oom_adj最小或偏小的值,也可以通过sysctl调节oom killer行为 如何查看OOM日志 grep "Out of memory" /var/log/messages

    1K20

    Linux系统之 OOM 解析

    本文将聚焦于 Linux 内存结构、内存分析以及 OOM killer 等 3 个方面以及笔者多年的实践经验总结进行“吹牛逼”,当然,若吹的不好,欢迎大家扔砖、鸡蛋。...OOM,全称为 “Out Of Memory”,即 内存溢出。OOM Killer 是 Linux 自我保护的方式,防止内存不足时出现严重问题。...p) return 0; /* 获取该进程的 oom_score_adj, 这个是用户为进程设置的 badness score * 调整值...->oom_score_adj; if (adj == OOM_SCORE_ADJ_MIN || test_bit(MMF_OOM_SKIP...综上所述,本篇文章主要通过基于对 Linux 内存结构、分析及 OOM Killer 3个核心维度,从主动及被动场景等 2 方面对 Linux 操作系统内存的剖析,以探讨在实际的业务场景中,内存表现的相关活动及经验认知

    2.9K30

    为什么我的进程被kill掉了

    如果真的发生了这种情况,就会触发linux内核的oom killing机制,即linux内核中的oom killer会按一定的规则,选一个进程,将其kill掉,这个上面我们已经演示过了。...这些情况包括,oom_score_adj的值为OOM_SCORE_ADJ_MIN,即-1000,或者该进程已经在被kill的过程中了,或者该进程在vfork过程中。...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...其实,调整linux内核中oom killer行为的方式有很多,不止修改oom_score_adj值这一种方法。...又因为在不调整oom_score_adj值的情况下,linux内核中的oom killer默认kill掉的,就是占用物理内存最多的那个进程,一般来说,就是我们数据库进程,或其他应用进程,假设这个进程又是线上的一个重要服务

    2.4K20

    为什么我的进程被kill掉了

    如果真的发生了这种情况,就会触发linux内核的oom killing机制,即linux内核中的oom killer会按一定的规则,选一个进程,将其kill掉,这个上面我们已经演示过了。...这些情况包括,oom_score_adj的值为OOM_SCORE_ADJ_MIN,即-1000,或者该进程已经在被kill的过程中了,或者该进程在vfork过程中。...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...其实,调整linux内核中oom killer行为的方式有很多,不止修改oom_score_adj值这一种方法。...又因为在不调整oom_score_adj值的情况下,linux内核中的oom killer默认kill掉的,就是占用物理内存最多的那个进程,一般来说,就是我们数据库进程,或其他应用进程,假设这个进程又是线上的一个重要服务

    2.5K51

    【Android 逆向】Android 系统文件分析 ( procpid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ )

    文章目录 一、/proc/pid_num 进程号对应进程信息文件 1、进程查询 2、进程目录 3、进程启动命令 / 包名 4、oom_adj 进程优先级 5、maps 进程内存使用概况 6、smaps...schedstat status clear_refs cpuset io mounts oom_score_adj smaps...初始化 Android 环境时 , 调用到的进程 ; walleye:/proc/1 # cat /proc/1/cmdline /init 4、oom_adj 进程优先级 查看 /proc/31359.../oom_adj 文件内容 : 16 , 这是进程的优先级 , 在之前进行进程保活时 , 分析过该参数 ; oom_adj 值越小 , 进程优先级越高 , 越不容易被杀死 ; walleye:/proc.../31359 # cat oom_adj 16 查看 /proc/31359/oom_adj 文件内容 : 该文件展示进程所使用到的内存 ; 5、maps 进程内存使用概况 查看 /proc/1/maps

    1.6K10

    记录一次应用被突然kill掉的问题定位经历

    : gfp_mask=0xd0, order=0, oom_score_adj=991 [16949523.942914] java cpuset=73a35980233979bb67f20700c76d77805de6ced7cfd18de836238a7bdae7c1dd...6、oom_kill.c 代码里可以看到 oom_badness() 给每个进程打分,根据 points 的高低来决定杀哪个进程,这个 points 可以根据 adj 调节,root 权限的进程通常被认为很重要...我们可以在用户空间通过操作每个进程的 oom_adj 内核参数来决定哪些进程不这么容易被 OOM killer 选中杀掉。...比如,如果不想 MySQL 进程被轻易杀掉的话可以找到 MySQL 运行的进程号后,调整 oom_score_adj 为 -15(注意 points 越小越不容易被杀) 7、oom_score_adj设置值范围...-1000 到 1000范围区间,设置举例:当某一个应用内存申请占用1G时,设置oom_score_adj=-500时,实际linux会认为该应用只用了500M,会有个打折机制;以确保某些重要应用不会被意外

    2.3K80

    郭健:Linux内存管理系统参数配置之OOM(内存耗尽)

    一、前言 本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。...4、oom_adjoom_score_adjoom_score 准确的说这几个参数都是和具体进程相关的,因此它们位于/proc/xxx/目录下(xxx是进程ID)。...如果用户将该task的 oom_score_adj设定成OOM_SCORE_ADJ_MIN(-1000)的话,那么实际上就是禁止了OOM killer杀死该进程。...了解了oom_score_adjoom_score之后,应该是尘埃落定了,oom_adj是一个旧的接口参数,其功能类似oom_score_adj,为了兼容,目前仍然保留这个参数,当操作这个参数的时候,...原标题:《Linux vm运行参数之(一):overcommit相关的参数》

    2.6K20

    linux内存不足导致tomcat宕机

    这是由于Linux 内核有个机制叫OOM killer(Out Of Memory killer),,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process...linux选择”bad”进程是通过调用oom_badness(),挑选的算法和想法都很简单很朴实:最bad的那个进程就是那个最占用内存的进程。 ​...对于每个进程都有一个oom_score的属性/proc/PID/oom_score oom- killer 会杀死oom_score较大的进程,当oom_score为0时禁止内核杀死该进程。.../proc/PID/oom_adj,一般来说,oom_adj的值越大,该进程被系统选中终止的可能就越高,当 oom_adj=-17时,oom_score将变为0。...(要对某个重要进程进行OOM保护的话,把-17写入到 oom_adj即可) echo -17 > /proc/PID/oom_adj 来防止重要的进程被oom_killer杀死。

    3.2K10

    【Android开发高级系列】内存管理专题

    为了使系统能够继续运转不至于卡死,系统会尝试杀死一些不重要的进程来进行内存回收,这其中涉及的模块主要是:Linux OOM Killer和LowMemoryKiller。         ...Linux OOM Killer是Linux内核的一部分,其源码可以在这里查看:/mm/oom_kill.c。         ...Linux OOM Killer的基本想法是: 当系统已经没法再分配内存的时候,内核会遍历所有的进程,对每个进程计算badness值,得分(badness)最高的进程将会被杀死。...Linux OOM Killer的执行流程如下: _alloc_pages -> out_of_memory() -> select_bad_process() -> oom_badness()         ...= p->signal->oom_score_adj;// 跳过那些oom_score_adj值比目标值小的         if(oom_score_adj < min_score_adj) {

    31930

    记录一次java应用突然挂掉的问题定位

    问题背景:一次启动本地应用,两分钟过后自动退出,通过日志并未发现任何异常状况,莫名其妙的应用就自动被杀掉了; 1、linux通过top查看java应用内存和cpu都不高,只是过一会突然就没了; 2、通过应用日志并未查到有任何异样...=0xd0, order=0, oom_score_adj=991 [16949523.942914] java cpuset=73a35980233979bb67f20700c76d77805de6ced7cfd18de836238a7bdae7c1dd...6、oom_kill.c 代码里可以看到 oom_badness() 给每个进程打分,根据 points 的高低来决定杀哪个进程,这个 points 可以根据 adj 调节,root 权限的进程通常被认为很重要...我们可以在用户空间通过操作每个进程的 oom_adj 内核参数来决定哪些进程不这么容易被 OOM killer 选中杀掉。...比如,如果不想 MySQL 进程被轻易杀掉的话可以找到 MySQL 运行的进程号后,调整 oom_score_adj 为 -15(注意 points 越小越不容易被杀)

    1.1K30
    领券