linux下的oom调试笔记【原创】
平台信息:
内核: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调试笔记【原创】的更多相关文章
- linux下多进程的调试
linux下多进程的调试: (1)follow-fork-mode set follow-fork-mode [parent | child] ---- fork之后选择调试父进 ...
- Linux下的反调试技术
Linux下的反调试技术 2014年01月30日 ⁄ 综合 ⁄ 共 2669字 ⁄ 字号 小 中 大 ⁄ 评论关闭 转自 http://wangcong.org/blog/archives/310 ...
- Linux下用Xdebug调试php
Linux下用Xdebug调试php 博客分类: php PHPLinuxZendEclipseC# 为了调试PHP程序,安装一下xdebug. 官方网址: http://www.xdebug.org ...
- Ubuntu\Linux 下编写及调试C\C++
一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...
- linux下core文件调试方法
http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...
- linux下core文件调试方法(转载)
转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...
- linux下安装一款笔记软件(为知笔记)
今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...
- linux下thinkphp取消调试模式后找不到网页解决方案
1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0 ...
- [转载] Linux 下产生和调试core文件
原地址:http://blog.csdn.net/shaovey/article/details/2744487 linux下如何产生core,调试core 在程序不寻常退出时,内核会在当前工作目录下 ...
随机推荐
- Spring Boot (2) Restful风格接口
Rest接口 动态页面jsp早已过时,现在流行的是vuejs.angularjs.react等前端框架 调用 rest接口(json格式),如果是单台服务器,用动态还是静态页面可能没什么大区别,如果服 ...
- 将DataTable某一列的值整体赋值给 另一个DataTable
将 DataTable某一列的值,赋值给 另一个DataTable: DataSet _ds=bll.GetAllList(); //将要取其中一列 DataView view = _ds.Table ...
- MessageDigest 加密和解密2
package com.drawthink.platform.util; import java.security.MessageDigest; import java.security.NoSuch ...
- Oracle update时做表关联
感觉还是sqlserver中的写法比较好理解,Oracle的写法都快把我搞晕了, 注意: 1.要修改的表,不要加入到子查询中,用别名在子查询中与其他表进行关联即可. 2.exsits不能少,exsit ...
- https ssl 总结
主要工作: 1)算法协商: 2)密钥交换: 3)身份认证: 4)数据通信: 1.2.3主要使用握手协议: 4使用记录协议. SSL协议可分为两层:记录协议.握手协议 SSL Record Protoc ...
- 连接(JOIN)运算
内连接--INNER JOIN 此处用商品表(product)和商店商品表(ShopProduct)测试,外键:product_id select sp.shop_id, sp.shop_name, ...
- 用Python来实现斐波那契数列.
1).递归 def fib_recur(n): assert n >= 0, "n > 0" if n <= 1: return n return fib_rec ...
- BZOJ 1705: [Usaco2007 Nov]Telephone Wire 架设电话线 DP + 优化 + 推导
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- PAT_A1129#Recommendation System
Source: PAT A1129 Recommendation System (25 分) Description: Recommendation system predicts the prefe ...
- eas之添加表格列宽自动调整设置
设置表格整体宽度自动调整为所在panel的宽度 KDTable table=new KDTable(); table. setAutoResize (boolean); 注意:该功能在冻结功能启用后, ...