[转帖]oom-killer错误排查过程
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错误排查过程的更多相关文章
- 嵌入式开发之内核内存异常排查---关闭oom killer
通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解.uptimedmesg | tailvmstat 1mpstat -P ALL 1pidstat 1iostat -xz 1free ...
- Linux OOM Killer造成数据库访问异常排查
服务器上的服务器访问异常,查看/va/log/messages发现如下: Sep 22 16:08:21 safeserver kernel: java invoked oom-killer: gfp ...
- OOM killer
Linux下有一种OOM KILLER 的机制,它会在系统内存耗尽的情况下,启用自己算法有选择性的kill 掉一些进程. 1. 为什么会有OOM killer 当我们使用应用时,需要申请内存,即进行m ...
- 理解和配置 Linux 下的 OOM Killer
原文:http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/ 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有 ...
- 关闭oom killer
最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ...
- [Python Web]配置 nginx 遇到错误排查(初级)
配置 nginx 遇到错误排查(初级) 系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu) 本文不是一步步搭建 nginx 的过程,而是我在使用 nginx ...
- Linux系统OOM killer机制详解
介绍: Linux下面有个特性叫OOM killer(Out Of Memory killer),会在系统内存耗尽的情况下出现,选择性的干掉一些进程以求释放一些内存.广大从事Linux方面的IT农民工 ...
- 记一次生产环境Nginx日志骤增的问题排查过程
摘要:众所周知,Nginx是目前最流行的Web Server之一,也广泛应用于负载均衡.反向代理等服务,但使用过程中可能因为对Nginx工作原理.变量含义理解错误,或是参数配置不当导致Nginx工作异 ...
- Linux(2)---记录一次线上服务 CPU 100%的排查过程
Linux(2)---记录一次线上服务 CPU 100%的排查过程 当时产生CPU飙升接近100%的原因是因为项目中的websocket时时断开又重连导致CPU飙升接近100% .如何排查的呢 是通过 ...
- Linux进程被杀掉(OOM killer),查看系统日志
基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...
随机推荐
- 【小白学YOLO】一文带你学YOLOv1 Testing
摘要:本文将为初学者带详细分析如何进行YOLOv1 Testing的内容. YOLOv1 Testing 进入testing阶段,我们已经得到98个bounding box和confidence还有C ...
- JVM面试必问:G1垃圾回收器
摘要:G1垃圾回收器是一款主要面向服务端应用的垃圾收集器. 本文分享自华为云社区<JVM面试高频考点:由浅入深带你了解G1垃圾回收器!!!>,原文作者:Code皮皮虾 . G1垃圾回收器介 ...
- 【“互联网+”大赛华为云赛道】GaussDB命题攻略:支持三种开发语言,轻松完成数据库缓冲池
摘要:七届中国国际"互联网+"大学生创新创业大赛火热报名中,为了帮助参赛者更好了解赛题设计思路和命题方向,华为云产业命题赛道举行了线上直播解读,华为云数据库资深架构师苏斌在直播间详 ...
- 云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究
摘要: 华为云医疗智能体面为基因组研究,提供高性能.高可靠性.高性价比的基因测序计算.存储和AI能力. 本文分享自华为云社区<[云图说]第230期 医疗智能体:AI赋 ...
- 云小课|云小课带你快速掌握云数据迁移CDM
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到云数据迁移 ...
- Python异步编程之yield from
yield from 简介 yield from 是Python3.3 后新加的语言结构,可用于简化yield表达式的使用. yield from 简单示例: >>> def gen ...
- Linux--修改会话超时时间
控制用户在一段时间内没有活动时会话的自动注销时间 1.修改ssh配置文件(适用于SSH会话) vim /etc/ssh/sshd_config ClientAliveInterval 1800 #秒 ...
- JSONObject--- JSON---与bean对象的转换
1.对象PO转json-string: String json = JSON.toJSONString(customerBueventAccountPO); 1.可能用到的jar宝: json-li ...
- 构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践
作者|柳下 概述 随着企业规模和数据量的增长,数据的价值越来越受到重视.数据的变化和更新变得更加频繁和复杂,因此及时捕获和处理这些变化变得至关重要.为了满足这一需求,数据库 CDC(Change Da ...
- normalize.css——移动端css初始化推荐
保护了有价值的默认值 修复了浏览器bug 是模块化的 拥有详细的文档 https://www.jianshu.com/p/9d7ff89757fd