[转帖]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),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...
随机推荐
- 什么是CodeArts?
摘要:一站式.全流程.安全可信的软件开发生产线. 软件开发生产线(CodeArts)原名"软件开发平台(DevCloud)"是集华为近30年研发实践.前沿研发理念.先进研发工具为一 ...
- 想了解Python中的super 函数么
摘要:经常有朋友问,学 Python 面向对象时,翻阅别人代码,会发现一个 super() 函数,那这个函数的作用到底是什么? 本文分享自华为云社区<Python 中的 super 函数怎么学, ...
- 解读分布式调度平台Airflow在华为云MRS中的实践
摘要:Airflow是一个使用Python语言编写的分布式调度平台,通过DAG(Directed acyclic graph 有向无环图)来管理任务. 本文分享自华为云社区<分布式调度平台Air ...
- webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建
Tree-shaking 最早由打包工具 Rollup 提出 DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之 ...
- hadoop put 强制覆盖文件
若hdfs上已经存在文件,要强制覆盖,用 -f 命令 如: hadoop fs -put -f file.name /home/test/
- 注册中心 —— SpringCloud Netflix Eureka
Eureka 简介 Eureka 是一个基于 REST 的服务发现组件,SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务 ...
- Open vSwitch系列之十 调用北向接口下发流表
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...
- AIGC加速迭代,云栖大会视频云「媒体服务」专场与你共话云智深度融合
2023杭州·云栖大会 倒计时5天! 阿里云视频云 5大并行Session 11场话题演讲 深度演绎云智融合的全面进化 「媒体服务」Tech专场 重磅议题剧透来袭 01 「媒体服务」Tech • 新数 ...
- WEB端播放华为海康大华视频方案
WEB端播放华为海康大华视频方案 类似标题:谷歌浏览器播放华为海康大华视频方案 方案 以下方案相当于给需要播放视频的WEB系统做了一个专用的浏览器,通过专用浏览器的CS客户端组件播放视频,当然,这个专 ...
- OS | 透过 inode 来理解硬链接和软链接
什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...