linux下的oom调试笔记【原创】

平台信息:
内核:linux3.0.68 
系统:android/android5.1
平台:s5p4418

作者:庄泽彬(欢迎转载,请注明作者)

邮箱:2760715357@qq.com

摘要:调整android系统的init.rc文件中开启服务的oom的值,使之可以被杀死。

首先:我们来做一下实验,在android系统的init.rc文件中添加一个服务。这个服务只做一件事情不断的申请内存。

 

 

oom.c的源码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 #include <sys/stat.h>
 6 #include <sys/types.h>
 7 
 8 #include <fcntl.h>           /* Definition of AT_* constants */
 9 #include <sys/stat.h>
10 
11 
12 
13 #define LOG_TAG "MyLed_jni"
14 #include <utils/Log.h>
15 #include <android/log.h>  /* liblog */
16 
17 
18 int main(void)
19 {
20     int i = 0;
21     char *buf;
2223     fprintf(stderr,"--------------------------- success -------------------------------->\r\n");           30     sleep(40);
31 #if 1
32     for(i = 0;i < 200;i ++){
33         fprintf(stderr,"%d: oom test\r\n",i);
34         buf = malloc(0xffffff);
35         bzero(buf,0xffffff);
36         if(buf == NULL){
37             printf("--------------------------- fail ------------------------------->\r\n");49         }else{
50             printf("--------------------------- success -------------------------------->\r\n");
51         }
52     }
53     while(1);
54 #endif
61     return 0;
62 }

在android系统启动之后开启服务:start oom,

系统会打印出这样的调试信息:] Kernel panic - not syncing: Out of memory and no killable processes...。由于找不到可杀死的进程,导致系统重启,为了不让系统重启,我们需要修改进程的oom_adj的值。

1、 start oom 开启服务
2、ps 查看服务的pid号为1783
root 1783 1 9244 396 c0062998 b6eb1324 S /system/bin/oom
3、root@u4209:/ # cat /proc/1783/oom_adj
-17
-17表示服务不可被杀死。因此我们需要改变他的值为普通的进程的等级为0.这样oom服务即可被杀死不会发出kernel panic。导致系统重启.

 

改变oom服务的oom_adj的方法:
1、使用命令的方式:
echo 0 > /proc/$PID/oom_adj //$PID改成服务的pid号
echo f > /proc/sysrq-trigger //调用oom_kill杀死内存的hog进程

这样设置之后oom服务在申请内存过多的时候就不会导致系统重启,而是将进程杀死。

 

转载于:https://www.cnblogs.com/zzb-Dream-90Time/p/7462940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值