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

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

邮箱:2760715357@qq.com

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

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

oom.c的源码:

 #include <stdio.h>
#include <string.h>
#include <stdlib.h> #include <sys/stat.h>
#include <sys/types.h> #include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h> #define LOG_TAG "MyLed_jni"
#include <utils/Log.h>
#include <android/log.h> /* liblog */ int main(void)
{
int i = ;
char *buf;
fprintf(stderr,"--------------------------- success -------------------------------->\r\n"); sleep();
#if 1
for(i = ;i < ;i ++){
fprintf(stderr,"%d: oom test\r\n",i);
buf = malloc(0xffffff);
bzero(buf,0xffffff);
if(buf == NULL){
printf("--------------------------- fail ------------------------------->\r\n"); }else{
printf("--------------------------- success -------------------------------->\r\n");
}
}
while();
#endif
return ;
}

在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服务在申请内存过多的时候就不会导致系统重启,而是将进程杀死。

linux下的oom调试笔记【原创】的更多相关文章

  1. linux下多进程的调试

    linux下多进程的调试:  (1)follow-fork-mode           set follow-fork-mode [parent | child] ---- fork之后选择调试父进 ...

  2. Linux下的反调试技术

    Linux下的反调试技术 2014年01月30日 ⁄ 综合 ⁄ 共 2669字 ⁄ 字号 小 中 大 ⁄ 评论关闭 转自  http://wangcong.org/blog/archives/310 ...

  3. Linux下用Xdebug调试php

    Linux下用Xdebug调试php 博客分类: php PHPLinuxZendEclipseC# 为了调试PHP程序,安装一下xdebug. 官方网址: http://www.xdebug.org ...

  4. Ubuntu\Linux 下编写及调试C\C++

    一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...

  5. linux下core文件调试方法

    http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...

  6. linux下core文件调试方法(转载)

    转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...

  7. linux下安装一款笔记软件(为知笔记)

    今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...

  8. linux下thinkphp取消调试模式后找不到网页解决方案

    1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0 ...

  9. [转载] Linux 下产生和调试core文件

    原地址:http://blog.csdn.net/shaovey/article/details/2744487 linux下如何产生core,调试core 在程序不寻常退出时,内核会在当前工作目录下 ...

随机推荐

  1. SLAM: Ubuntu14.04_Kylin安装ROS-Indigo

    参考连接:ROS-Indigo版在Ubuntu上的安装第一步: 软件源配置 1. 增加下载源(增加ubuntu版的ros数据仓库,即下载源)(通用指令适合任何版本的ros) sudo sh -c 'e ...

  2. BSGS-BabyStepGiantStep算法+拓展

    学习数学真是一件赛艇的事. BSGS名字听起来非常有意思,力拔山兮气盖世,北上广深,小步大步...算法其实更有意思,它是用来求解一个方程的 A^x ≡ B (mod P) 是不是特别眼熟,有几个式子长 ...

  3. 读书笔记「Python编程:从入门到实践」_7.用户输入和while循环

    7.1 函数input()的工作原理 函数input() 让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. message = input(&qu ...

  4. jquery的attr和prop

    注意不同版本的attr和prop,attr适用于自定义dom值,prop适用于带有固有属性

  5. LINQ to Entities 不识别方法“System.Nullable`1[System.Int32] DiffDays(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])”,因此该方法无法转换为存储表达式。

    解决方案: db.table.Where(m=>System.Data.Objects.EntityFunctions.DiffDays(m.CreateTime, DateTime.Now) ...

  6. Appium Desired Capabilities信息配置

    编写APPium脚本,必须要配置Desired Capabilities信息 Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilit ...

  7. react获取url查询参数

    继承自React.Component的this.props.location.query对象下有当前url的各种查询参数.简单的例子:在控制台打印这个对象 import React from 'rea ...

  8. mysql与oracle 表字段定义比较

    链接: https://blog.csdn.net/yzsind/article/details/7948226

  9. Linux删除大于/小于固定大小的文件等

    删除目录下大小为0的文件 rm -f 删除当前目录下面所有 test 文件夹下面的文件 find ./ -name "test" -type d -exec rm -rf {} ; ...

  10. javascript匿名函数及闭包深入理解及应用

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...