https://www.cnblogs.com/hphua/p/16395893.html

1、遇到的问题:应用在hi3536上跑一段不固定的时间,随之就会出现重启的现象;打印如下;

app-run invoked oom-killer: gfp_mask=0x1042d0, order=3, oom_score_adj=0
CPU: 0 PID: 1299 Comm: ckdecoder Tainted: P           O 3.10.0_hi3536 #2
[<c0019d30>] (unwind_backtrace+0x0/0xf4) from [<c0016de4>] (show_stack+0x10/0x14)
[<c0016de4>] (show_stack+0x10/0x14) from [<c051ea44>] (dump_header.isra.10+0x7c/0x194)
[<c051ea44>] (dump_header.isra.10+0x7c/0x194) from [<c0091dec>] (oom_kill_process+0x278/0x3e8)
[<c0091dec>] (oom_kill_process+0x278/0x3e8) from [<c00923e0>] (out_of_memory+0x28c/0x2b0)
[<c00923e0>] (out_of_memory+0x28c/0x2b0) from [<c0095590>] (__alloc_pages_nodemask+0x690/0x6a8)
[<c0095590>] (__alloc_pages_nodemask+0x690/0x6a8) from [<c00955b8>] (__get_free_pages+0x10/0x24)
[<c00955b8>] (__get_free_pages+0x10/0x24) from [<c00dd784>] (seq_buf_alloc+0x10/0x34)
[<c00dd784>] (seq_buf_alloc+0x10/0x34) from [<c00dd914>] (traverse+0x16c/0x1e8)
[<c00dd914>] (traverse+0x16c/0x1e8) from [<c00dda14>] (seq_lseek+0x84/0x110)
[<c00dda14>] (seq_lseek+0x84/0x110) from [<c010ddcc>] (proc_reg_llseek+0x68/0xa0)
[<c010ddcc>] (proc_reg_llseek+0x68/0xa0) from [<c00bea74>] (SyS_lseek+0x60/0x84)
[<c00bea74>] (SyS_lseek+0x60/0x84) from [<c0012f80>] (ret_fast_syscall+0x0/0x30)
Mem-info:
Normal per-cpu:
CPU    0: hi:   42, btch:   7 usd:   0
CPU    1: hi:   42, btch:   7 usd:  40
CPU    2: hi:   42, btch:   7 usd:   6
CPU    3: hi:   42, btch:   7 usd:   0
active_anon:9622 inactive_anon:0 isolated_anon:0 (后面的打印省略了... ...)

二、初步排查

2.1、使用gdb调试时,出现上述错误时,无堆栈信息;

2.2、跑应用时,用free -m查看时,空闲的内存一直往下掉;查看代码中的malloc内存分配相关的代码,分配的内存都有free;

2.3、从现象看,解码路数多时,oom错误更容易出现;解码路数少时,oom错误不是那么容易出现,初步怀疑是解码的代码出问题,但是查看解码的代码,并无发现明显的异常;

2.4、刚准备用memleak查看内存泄露的问题,实际后续并未使用;

2.5、决定把代码简化,去掉一些线程(管理线程、网络线程、串口通信线程),协助定位,定位到是串口线程导致内存泄漏,查看串口相关的线程,发现查询解码器状态的节点,一直在循环open,没在close;

于是每次open,close掉,现次验证,用free -m查看,内存没有再一直往下掉了;

三、收获

1、产生oom-killer错误,也不一定是malloc分配的内存没有回收造成的;

2、gdb调试这类错误,既然也会出现无堆栈的情况,应该是内存耗完了导致的;

3、养成好习惯,mallloc和free,open和close、fopen和fclose要配对使用;

[转帖]oom-killer错误排查过程的更多相关文章

  1. 嵌入式开发之内核内存异常排查---关闭oom killer

    通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解.uptimedmesg | tailvmstat 1mpstat -P ALL 1pidstat 1iostat -xz 1free ...

  2. Linux OOM Killer造成数据库访问异常排查

    服务器上的服务器访问异常,查看/va/log/messages发现如下: Sep 22 16:08:21 safeserver kernel: java invoked oom-killer: gfp ...

  3. OOM killer

    Linux下有一种OOM KILLER 的机制,它会在系统内存耗尽的情况下,启用自己算法有选择性的kill 掉一些进程. 1. 为什么会有OOM killer 当我们使用应用时,需要申请内存,即进行m ...

  4. 理解和配置 Linux 下的 OOM Killer

    原文:http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/ 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有 ...

  5. 关闭oom killer

    最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ...

  6. [Python Web]配置 nginx 遇到错误排查(初级)

    配置 nginx 遇到错误排查(初级) 系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu) 本文不是一步步搭建 nginx 的过程,而是我在使用 nginx ...

  7. Linux系统OOM killer机制详解

    介绍: Linux下面有个特性叫OOM killer(Out Of Memory killer),会在系统内存耗尽的情况下出现,选择性的干掉一些进程以求释放一些内存.广大从事Linux方面的IT农民工 ...

  8. 记一次生产环境Nginx日志骤增的问题排查过程

    摘要:众所周知,Nginx是目前最流行的Web Server之一,也广泛应用于负载均衡.反向代理等服务,但使用过程中可能因为对Nginx工作原理.变量含义理解错误,或是参数配置不当导致Nginx工作异 ...

  9. Linux(2)---记录一次线上服务 CPU 100%的排查过程

    Linux(2)---记录一次线上服务 CPU 100%的排查过程 当时产生CPU飙升接近100%的原因是因为项目中的websocket时时断开又重连导致CPU飙升接近100% .如何排查的呢 是通过 ...

  10. Linux进程被杀掉(OOM killer),查看系统日志

    基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...

随机推荐

  1. 揭秘华为云GaussDB(for Redis)丨大key治理

    本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第31期:大key治理>,作者: 高斯Redis官方博客. 从DBA的视角看,大Key无疑是引起Redis线上问题的常见 ...

  2. 还在手动发早安吗?教你用java实现每日给女友微信发送早安

    摘要:教你如何用java实现每日给女友微信发送早安等微信信息. 本文分享自华为云社区<java实现每日给女友微信发送早安等微信信息>,作者:穆雄雄 . 前言 据说这个功能最近在抖音上很火, ...

  3. 【有奖征文】WEB前端大作战,走在技术最前端!

    摘要:投稿分享你在前端领域的积累,秀出你的技术"肌肉",为自己,也为技术发声. 近几年大家对于WEB前端的关注度很高, 比如整体势头发展良好,各种技术百花齐放,人才稀缺, 随着互联 ...

  4. 应对全场景AI框架部署挑战,MindSpore“四招”让你躺平

    摘要:所谓全场景AI,是指可以将深度学习技术快速应用在云边端不同场景下的硬件设备上,包括云服务器.移动终端以及IoT设备等等,高效运行并能有效协同. 本文分享自华为云社区<AI框架的挑战与Min ...

  5. 详解MRS CDL整体架构设计

    摘要:MRS CDL是FusionInsight MRS推出的一种数据实时同步服务,旨在将传统OLTP数据库中的事件信息捕捉并实时推送到大数据产品中去,本文档会详细为大家介绍CDL的整体架构以及关键技 ...

  6. 为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022

    GitHub Universe 2022于上周举办.在此次大会上,Github 公布了开源软件状态的最新报告,报告中的统计数据显示,90% 的公司都在使用开源,现在 GitHub 上有9400万用户, ...

  7. Mysql--between

    between 用于where 表达式中,选取介于两个值之间的数据范围,同and一起搭配使用 语法: expr [NOT] BETWEEN begin_expr AND end_expr; 在整个表达 ...

  8. Jetpack初步了解

    1.为何要引入Jetpack呢? 通常来说,一个Android应用程序至少需要一个Activity,当我们开发小型Android程序时,可能会将大部分代码写在Activity/Fragment中,例如 ...

  9. 2019年第十届蓝桥杯国赛C++C组

    蓝桥杯历年国赛真题汇总:Here 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using namespace std; ios::sync ...

  10. vivo 悟空活动中台 - 栅格布局方案

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/6O0CH0U_WE1YkPK75m-jDQ作者:悟空中台研发团队 一.背景 今天来给大家分享 ...