关于OOM问题分析

原创 2016年06月01日 13:12:55
1.[FAQ02683]如何将一个app 设置为持久app, 不被low memory kill 关闭
[Description]
如何将一个app 设置为常住app, 不被low memory kill 关闭
[Keyword]
app 持久 persistent
[Solution]
1. 将app 的manifest.xml 中的 application 中添加属性
android:persistent="true"
2. 对这个APP 使用platform 的签名

3. 放置在system/app 下面

注: 一个app 被设置为 persistent 后,将很难被low memory kill 杀掉(oom_adj=-12),请在设置之前仔细确认是否必须,否则将浪费掉memory。

2.[FAQ10559]如何更新LMK Low Memory Killer 的
阈值
[Description]
如何更新LMK Low Memory Killer 的阈值
[Keyword]
LMK Low Memory Killer 阈值 Threshold adj
[Solution]
Low Memory Killer 的阈值分成两个数组,一个是adj 数组,描述process 所对应的oom_adj,另外一个是minfree 数组,描述process 所对应的memory 的阈值。
上层可以直接通过读写:
/sys/module/lowmemorykiller/parameters/adj
/sys/module/lowmemorykiller/parameters/minfree
来进行调整.minfree 以KB 为单位
在JB 以后版本,AMS 起到后,将根据屏幕分辨率以及内存大小调整默认的LMK 的阈值,对应的具体的代码在:
frameworks/base/services/java/com/android/server/am/ProcessList.java#updat
eOomLevel
可以修正这个updateOomLevel 来调整LMK 的这两个参数
注意, 从JB9.MP 后,LMK 自动将oom_adj 转换成 oom_score_adj ,即写入时依旧是
按照oom_adj 写入,而读取出来时,则是oom_score_adj.
if oom_adj = 15 then oom_score_adj = 1000;
else oom_score_adj = oom_adj * 1000/17;
简单的oom_adj 与oom_score_adj 的转换表格:
oom_adj  oom_score_adj
-16             -941
-12             -705
0                  0
1                 58
2                117
4                235
6                352
9                529
15              1000

问题3:清除掉已经被kill的应用的资源
 JAVACRASH on system.server java.lang.OutOfMemoryError at android.os.FileUtils.readTextFile


WindowManagerService: Cleanup the starting window resources   
When an application dies very early after being launched, some resources ViewRootImpl are left in system_server.   
This patch removes those resources when the window is removed from WindowManagerService.  




   public void removeWindowLocked(Session session, WindowState win) {       ...  
        if ( (win.mAppToken != null) && (win.mAppToken.startingView != null) ) {  
            View view = win.mAppToken.startingView;  
            win.mAppToken.startingView = null;  
            mPolicy.removeStartingWindow(null, view);  
        }  
      ...  
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 进程级别 和 oom_adj对应关系

一 : 前台进程 (Active Process): oom_adj为0。 前台进程包括 : 1、活动 正在前台接收用户输入 2、活动、服务与广播接收器正在执行一个on...
  • u012964796
  • u012964796
  • 2017年03月14日 19:27
  • 1335

oom_adj分析

postgres 大表merge join的时候占用了大量的work
  • yibei8811
  • yibei8811
  • 2015年06月11日 16:55
  • 675

Android ActivityManagerService根据oom_adj数值内存回收机制

转:http://blog.csdn.net/zhoumushui/article/details/51197747 当系统的内存不足时, Android系统将根据进程优先级选择杀死一些不太重要的...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2016年10月26日 11:12
  • 1826

关于OOM和内存回收的一点浅显的认识

Low Memory Killer在用户空间中指定了一组内存临界值,当其中的某个值与进程描述中的oom_adj值在同一范围时,该进程将被Kill掉。 Android的每一个应用都是运行在一个独立的DV...
  • rajayu
  • rajayu
  • 2015年10月22日 14:19
  • 1361

Linux -- 内存控制之oom killer机制及代码分析

线上一些内存占用比较敏感的应用,在访问峰值的时候,偶尔会被kill掉,导致服务重启。发现是Linux的out-of-memory kiiler的机制触发的。...
  • GugeMichael
  • GugeMichael
  • 2014年04月18日 15:04
  • 25598

消失的Java进程-Linux OOM Killer

在一台虚拟机上执行docker java应用,每隔一段时间就会出现java进程消失、而且没有任何jvm error log的情况。略一寻思,应该是遇到网上常说的Linux OOM的情况:虚拟机10G,...
  • liu251
  • liu251
  • 2016年04月18日 18:45
  • 4565

oom-killer

内存不够时系统会启动oom-killer ~ # ft2_test 192.168.1.29 192.168.1.71 rtl8168: eth0: link up info [create_s...
  • luckywang1103
  • luckywang1103
  • 2015年09月23日 19:59
  • 1032

OOM问题总结

OutOfMemoryError(OOM)就是常说的内存泄露问题。为了能够使Android应用程序能够高效快速地运行,所以Android的每个应用程序都会用一个专有的Davilk虚拟机(Android...
  • lj19851227
  • lj19851227
  • 2015年03月23日 15:59
  • 1821

java OOM(OutOfMemory) 问题分析

偶然在工作中有发现部署的应用有内存溢出,所以抽空补充了一下这些方面的知识。 内存溢出我们可以通过heapDump来分析到底是那个对象吃掉过多内存而导致的。而heapDump我们可以使用一下方法获取: ...
  • sulong507
  • sulong507
  • 2016年06月16日 18:41
  • 1057

zygote oom_score_adj 被设置成1000

mkd-275   [000] d..3 45647.298262: oom_score_adj_update: pid=22219 comm=ReferenceQueueD oom_score_ad...
  • ermuzhi
  • ermuzhi
  • 2015年08月27日 13:49
  • 2356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于OOM问题分析
举报原因:
原因补充:

(最多只允许输入30个字)