关于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 内存管理 &Memory Leak & OOM 分析

1、Android 进程管理&内存 Android主要应用在嵌入式设备当中,而嵌入式设备由于一些众所周知的条件限制,通常都不会有很高的配置,特别是内存是比较有限的。如果我们编写的代 码当中有太多的对内...
  • vshuang
  • vshuang
  • 2014年09月28日 21:27
  • 27767

android OOM_adj 的设置流程

流程如下: setOomAdj --> framework/base/core/jni/android_util_Process.cpp android_os_Process_setOo...
  • ljchlx
  • ljchlx
  • 2016年09月12日 17:29
  • 1516

利用Android的UncaughtExceptionHandler捕获崩溃异常

利用Android的UncaughtExceptionHandler捕获崩溃异常我们在开发Android应用时,由于一些这样那样的原因,偶尔会导致程序崩溃,而有的崩溃可以轻松的捕获到异常,有的崩溃就不...

android枚举的替代(官方建议)

Enums often require more than twice as much memory as static constants. You should strictly avoid us...

Andorid Volley框架加载图片OOM问题分析

Android volley 引起的context 上下文 内存泄露,导致的OOM问题分析解决

问题分析-无界线程池误用导致OOM:java.lang.OutOfMemoryError:unable to create new native thread

背景 在对线上查询接口进行压测时,当并发量上去后报出无法创建线程池的异常。 分析 之前的博客里提到,线程创建使用的不是堆内存,而是实际物理内存。由于没有对应用的线程数资源进行监控,同时也没有对当时的内...

Elasticsearch使用TTL导致OOM问题分析解决

1.现象 今天我们的ES出现了OOM 日志如下: [2017-06-21 11:10:12,250][WARN ][monitor.jvm ] [dm_172.20.7...

关于ANR,OOM等问题分析流程的介绍

关于ARN和OOM的一些问题的分析流程,我主要是对博客进行了一个整理,解决了我的问题,特此记录学习。 首先对于底层的ANR(application not responding)和OOM(out of...

Hive中跑MapReduce Job出现OOM问题分析及解决

一、引子今天在跑一段很复杂而且涉及数据量10年的N个表join的长SQL时,发生了OOM的异常。由于一个map通常配置只有64MB或者128MB,则在Map阶段出现OOM的情况很少见。所以一般发生在r...

使用AndroidStudio分析和解决ImageLoader引起OOM问题

转载地址:http://blog.csdn.net/u012306714/article/details/50765289 公司正在做的项目使用到了ImageLoader来加载大量图...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于OOM问题分析
举报原因:
原因补充:

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