记一次解决OTA死机重启bug,如何分析与解决措施?!
背景:
平台:stm32mp151平台
什么是OTA?
说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上。
我们不仅可以通过网络下载OTA升级包,也可以通过下载OTA升级包到SD卡或U盘后再对设备升级。
OTA下载方式:
- 短信方式
- PUSH方式
- 网络定制
本例网络定制方式。
现象描述
本产品通过OTA升级测试,升级162次,死机重启19次,如下图所示:


死机重启分析:
1. 为何oom会导致重启?
当需要申请物理页面时,首先使用快通道申请页面,当快通道申请不到将会进入慢通道,当慢通道也无法申请是将触发oom-killer,正常情况下会杀死消耗物理页面最多的进程,而设备直接进入PANIC然后重启。
当申请物理页面时free页面很多情况也会存在页面申请失败的现象,一方面可能内存外碎片化严重,另一方面可能是无法借用其他迁移类型内存。因此尽量不要使能panic_on_oom,但设备使能该参数,如下图所示:

若去掉使能选项,oom-killer将会杀掉物理页最大进程,因此应该杀死蓝牙进程,在升级过程中,杀掉蓝牙进程对业务无任何影响。下图为不开启参数而杀掉最大物理页进程:

2. 为何free页面很多但是还是会进入oom?
当前我们已经知道因/proc/sys/vm/panic_on_oom=1 导致进入oom后便会panic然后重启,但为何内存不足呢?
我们的日志提示还有126M物理页处于空闲可用,不应该会进入内存申请失败的情况。

细看可知gfp_mask=0x101cc0,则MIGRATE_MOVABLE未置1,导致ALLOC_CMA未置1,既不允许使用cma_pages,



当CMA页面不允许使用时,实际所剩余可申请的页面数:free减去free_cma,free_cma提示120多M(高达实际物理内存一半),所以剩余非迁移属性的页面只剩几M:

解决措施:
因此除了关闭panic_on_oom,还应该去查查为何free_cma为何可以分配的那么多,而不做最大值限制,通过启动日志可看出系统CMA的最大限制为128M,如下图所示:

CMA我们分配竟然达到了50%物理内存,因此将CMA降成64M大小,以释放64M用于非迁移属性页面申请。通过uboot传参cma=64M,可将cma最大值设置为64M。


记一次解决OTA死机重启bug,如何分析与解决措施?!的更多相关文章
- win7蓝屏死机0x0000003B错误蓝屏故障解决
win7蓝屏死机0x0000003B错误蓝屏故障解决 刚才一个朋友问我:电脑蓝屏了怎么办. 我问他要了电脑的截图,自己看了错误代码:0x0000003B 搜索资料,查询了一番.都是说电脑中病毒或者是系 ...
- Ubuntu 图形桌面死机重启(机器不重启)
Ubuntu的图形界面容易死机,如果正在跑程序的话又不能重启.这时候可以通过终端来_重启_图形界面. 首先按Alt+Ctrl+F1进入终端界面.查看图形界面的进程: ps -t tty7 查看到名为X ...
- openstack环境-解决windows虚机重启后比当前时间晚8小时问题
背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...
- loadrunner解决浏览器死机问题
初次接触loadrunner时,遇到很多问题.浏览器崩溃以及录不到脚本就折磨了一周时间.最后终于解决 一.浏览器崩溃问题 1.退出安全卫士和防火墙 2.去掉IE第三方扩展.工具-Internet选项- ...
- selenium+phantomjs报错:Unable to find a free port的分析和解决
selenium+phantomjs报错:Unable to find a free port的分析和解决 Table of Contents 1. 现象 2. 分析 3. 解决办法 1 现象 在做项 ...
- php-fpm死机解决办法,脚本后台自动重启
本人用nginx+php7搭建了一台服务器,因为请求量太大,而且php里面又有挂起的任务,导致php-fpm在高峰期的时候经常死掉,吧php-fpm的最大进程数已经改到1000了,还是吃不消,cpu也 ...
- Ubuntu死机解决方法汇总
为什么不建议强制关机 如果长按电源按键强制关机,有可能损坏硬件或者丢失数据,甚至导致磁盘坏道! 其实, 大部分时候的死机是假死, 不是真死... 有时候鼠标还能动呢. 还有一个原因: 对于平时忠贞不二 ...
- [vmware]另类解决vmware关闭win10死机或蓝屏问题
升级win10后在使用虚拟机发生一个问题,本人的win10版本为win10 9879, 在使用vmware时,当关机会整个系统死机,在网上搜索后发现这是由于win10内核升级导致vmware不兼容,最 ...
- linux死机解决办法
linux死机后不要长按电源建强制关机,容易对损坏系统配置或者电脑硬件,导致重启后产生不必要的麻烦 如果是在图形界面下死机的话,不要再依赖任何图形界面的工具,解决方法如下: 1.一种方式是进入终端界面 ...
- 解决Oracle+weblogic系统死机的问题
前段时间发布的系统(Oracle+weblogic)频繁挂掉,每天早上9点.下午2点高峰期就挂,纠结了很长时间,最终解决,方法描述下. 执行select count(*),status from v$ ...
随机推荐
- 服务器上安装centos7系统遇到的坑
centos7的安装报错"no controller found" 出现no controller found解决方案1.等待命令行出现 2.输入ls /dev/sd* 找到自 ...
- .NET 高效灵活的API速率限制解决方案
前言 FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口.滑动窗口.漏桶.令牌桶等.通过简单的配置和集成,开发 ...
- 记一个,生产遇到的redission锁,释放问题:lock.tryLock(0, 0, TimeUnit.SECONDS)
package com.aswatson.cdc.test; import org.redisson.Redisson; import org.redisson.api.RLock; import o ...
- C#中关于 object,dynamic 一点使用心得
首先说一下使用场景 WebAPI接口入参使用 object和 dynamic 后续解析和处理 1.object和dynamic 区别 在.NET中,object和dynamic也有一些区别: obj ...
- Rougamo、Fody 实现静态Aop
最近在看项目,看到别人使用Rougamo框架,好奇花了点时间仔细研究了,在这里记录一下. 0. 静态编织 Aop 首先,我们先了解什么是Aop? Aop 是指面向切面编程 (Aspect Orient ...
- VulnHub_DC-5渗透流程
DC-5 主机探测 nmap 192.168.157.0/24 访问网站 探测网站得知是Nginx 目录扫描 在Contact处可以提交东西,抓个包,发现在thankyou.php界面时间年份会变,应 ...
- 4 - 【RocketMQ 系列】CentOS 7.6 安装部署RocketMQ
五.自启动脚本 1.rocketmq 服务脚本 cd /etc/init.d vim rocketmq 把下面内容填好后 按ESC 再输入 :wq! 保存退出 之后再修改权限 chmod 777 ro ...
- influxdb得导出与导入
转载请注明出处: 1.备份元数据 基本语法: influxd backup <path-to-backup> 备份元数据,没有任何其他参数,备份将只转移当前状态的系统元数据到path-to ...
- 0. 什么是C++
什么是C++ 是C语言的扩展,有如下的两个特性: 关注性能 与底层硬件紧密结合 对象生命周期精确控制 零成本抽象(Zero-overhead Abstraction) 引入大量利于工程实践的特性 三种 ...
- Centos7 安装 rabbitmq-server-3.7.7 图文教程
下载 rabbitmq-server wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3. ...