辉哥给rockchip修复了一个内存溢出问题

还是周末

我也不想说周末,但是不是周末的话,可能也没有特别清净的时间来处理困难的问题。这周末我是要加班的,加班的前一个晚上,我领导找我们吃了一个便饭,聊了很多东西,这篇文章我就不说了,会在下篇文章来讲这个事情,这篇文章就讲修复的内存溢出的问题。

问题出现的现象

现象是我们测试发现,晚上在不断的运行后会出现重启,而且是每隔1个小时左右就会重启。

然后我们拿到了日志分析,发现每次重启前都会出现 Out of memory,这里感谢guanxi同学,我那时候还没有注意,他给我指出来了。

OOM会导致系统把占用内存最大的进程给kill掉,如果连续3次OOM,就会导致重启。

当然,你也可以设置阈值来修改这些配置,如下,可以修改触发OOM的门限

echo -100 > /proc/$PID/oom_score_adj

分析问题

因为每次出现后都是会干掉我们的应用程序,我们先把应用程序分析了一遍,最后发现把我们的应用程序干掉还是会出现内存溢出。

export TERM=linux
htop

关于htop的用法大家可以去自己体验一下,里面有非常多的配置,可以看到很多关于系统的内容。

在htop界面,可以清晰的看到内存一点一点的增加。

所以,不是应用的问题。

系统部分分析

然后我回退代码,发现是一个HID的修改增加导致的,这个修改是和HID增加mute相关的。

再观察日志的时候,在正常的情况下,内核不会反复打印某条日志。

然后就用上了抓包工具wireshark,这个工具不仅可以抓网络包,还可以抓USB包。

抓到包后,发给我的同事辉哥,辉哥分析后是因为代码里面没有对这种异常情况进行判断。

so,加上这部分的判断就可以了。

非常感谢guanxi给我们提供了另外一种USB抓包工具

如果大家想获取,可以在公众号后台回复「USB抓包工具

83a65919c143d17fd800e90ea93e980f.png

关于这个问题的一些思考

刚开始我想找到某个线程的内存异常,但是线程的内存和进程是共享的,所以一个进程开了20个线程,每个线程体现的都是进程的内存大小,看起来并没有差异。而且我在查看进程内存的时候,发现进程的内存并没有增加,这时候我就应该转变方向了。

rockchip的很多代码写的都很好,但是在实际的应用场景上,会遇到各种各样的问题,我们这次的修改,也是因为在这款设备上面出现的差异,在其他设备上是没有问题的,但是要想去排查所有的硬件差异后根除,那可能比修改代码更加困难。

抓日志分析一定是最好的解决问题的方式,在遇到问题前,还是要先找出问题差异点,从差异点去分析。

最后还是辉哥,yyds。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

习题1-3

#include<stdio.h> int main() {int n,sum0;scanf("%d", &n);for (int i 1; i < n1; i){sum sum i;}printf("%d\n",sum);return 0; } 连续和转载于:https://www.cnblogs.com/zhuzehua/p/9783091.html

将一个数组里面的奇数全部排在前面,偶数排在后面

将一个数组里面的奇数全部排在前面&#xff0c;偶数排在后面 方法1&#xff1a;使用数组。 void paixu(int dest[], int n, int src[]) {int i 0, m n-1, k 0;if (0 > n){return ;}for (i 0; i < n; i){if (0 ! (src[i] % 2))///奇数{dest[k] src[i];k ;}else{de…

MVC(dotnet)

一天中吹牛的时间到了&#xff0c;纠正一下自己的思维&#xff0c;要是能让过客收益那是我的荣幸。 前段时间就三层&MVC被一些网友搅的一头雾水....管他萝卜酸菜吃下去了才是自己的。 首先我要说明的是MVC只是一个表现模式&#xff0c;是一种软件架构模式&#xff0c;而三层…

微信小程序轮播图中间变大_微信小程序实现带放大效果的轮播图

本文实例为大家分享了微信小程序实现带放大效果的轮播图&#xff0c;供大家参考&#xff0c;具体内容如下效果如图WXMLWXSS.Carousel{margin-top: 49px;background-color: #fff;}.swiper-container{position: relative;}.swiper-container .swiper{padding-top: 8px;height: 38…

跟我领导吃饭

上篇文章说&#xff0c;下篇文章会说跟我们领导吃饭的事情。我领导是我上上上家公司的领导&#xff0c;不是现在TC的领导。自从离职后&#xff0c;我们差不多6个月没再见面&#xff0c;那时候我想跳槽&#xff0c;是因为得到消息说他要走&#xff0c;我刚开始不相信&#xff0c…

tyvj 1391 走廊泼水节【最小生成树】By cellur925

题目传送门 题意简化&#xff1a;给你一棵树&#xff0c;要求你加边使它成为完全图&#xff08;任意两点间均有一边相连&#xff09; &#xff0c;满足原来的树是这个图的最小生成树。求加边的价值最小是多少。 考虑Kruskal的过程&#xff0c;我们每次找一条最短的&#xff0c;…

分解成质因数

分解成质因数 (如435234251*17*17*3*2) void prim(int m) {int n 2;if (m > n) {while (m%n ! 0) {n;}m / n;prim(m);printf(“%d*”, n);} }

支持向量机-SVM-最优化公式推导记录

1. 简述 SVM涉及的东西很多&#xff0c;如果要理解全面的话&#xff0c;要理解经验风险与置信风险&#xff0c;VC维理论&#xff0c;推导出最优化公式&#xff0c;最优化求解的拉格朗日解法&#xff0c;核函数&#xff0c;等等方面的内容&#xff0c;当前对SVM理解太少&#xf…

mysql innodb 死锁_mysql innodb 死锁分析

mysql Ver 14.14 Distrib 5.7.16, for linux-glibc2.5 (x86_64) using EditLine wrapper #mysql版本 5.7.16Connection id: 10042Current database: china9129Current user: rootlocalhostSSL: Not in useCurrent pager: stdoutUsing outfile: Using delimiter: ;Server versio…

django 函数装饰器 变为 类装饰器

aaa 转载于:https://www.cnblogs.com/pythonClub/p/9789190.html

求出2个字符串中的最大公共子串

给定字符串A和B,输出A和B中的最大公共子串。 比如A"aocdfe" B"pmcdfa" 则输出"cdf" void commonstring(char *str1, char *str2, char *maxSubstr) {int i 0, j 0, k 1, maxPos -1, maxLen 0;if ((NULL str1) || (NULL str2) || (NUL…

写flash,要不要加个判断?

相关文章既生Flash&#xff0c;又何生EEPROM&#xff1f;存储器Flash页、扇区、块的区别这是我一个知识星球朋友的提问刚开始我没有认真去思考这个问题&#xff0c;之后我仔细查了下资料&#xff0c;里面的内容还挺多。先看看EMMC的结构EMMC 是在nand flash的基础上增加了一个控…

IT 事业发展:树立自己的品牌

发展事业并达到事业顶峰是指树立自己的形象并进行自我推销。方法就在这里。 摘自 Sutton Hart Press (2011) 出版的《Fame 101》。 Jay 和 Maggie Jessup Fame 101 的基础以及成名公式很简单&#xff1a;成名 树立个人品牌 宣传 将自己的品牌推向市场 个人财务发展 宣传长…

mysql用户数据导入_mysql创建数据库、用户及导入数据_mysql数据库教程

怎样mysql创建数据库、用户及导入数据1. 修改MYSQL服务器字符集为utf8:1.1 当前MYSQL服务器字符集设置SHOW VARIABLES LIKE character_set_%;1.2 修改字符集mysql> SET character_set_client utf8 ;mysql> SET character_set_connection utf8 ;mysql> SET character…

谈谈JDK8中的字符串拼接

字符串拼接问题应该是每个Java程序员都熟知的事情了&#xff0c;几乎每个Java程序员都读过关于StringBuffer/StringBuilder来拼接字符串。 在大多数的教程中&#xff0c;也许你会看到用号拼接字符串会生成多个String&#xff0c;导致性能过差&#xff0c;建议使用StringBuffer/…

破解STM32F103芯片的方法

大家好&#xff0c;我是写代码的篮球球痴本文介绍ARM系列STM32F103芯片的解密方法&#xff0c;其内核是Cortex-M3&#xff0c;内存从16K-512K都有。该芯片主要应用非常广泛&#xff0c;日常消费类电子产品&#xff0c;工控设备&#xff0c;电机驱动&#xff0c;变频器&#xff…

排序算法之两路归并排序(Java)

将2个有序的数组合并为一个有序的数组 时间复杂度为O(nlogn) 默认是按升序进行排序&#xff1a; public class MergeSort { public static int[] sort(int[] data, int low, int high) {int mid (low high) / 2;if (low < high) {sort(data, low, mid);sort(data, m…

一天学一个模式_第一天:策略模式

概念&#xff1a;  策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 &#xff08;原文&#xff1a;The Strategy Pattern defines a family of algorithms,encapsula…

python标准库怎么用_Python常用标准库使用(一)

自学python一段时间&#xff0c;之前总是学习基本语法&#xff0c;对Python标准库没怎么接触&#xff0c;所以计划从常用的标准库开始&#xff0c;大体了解一遍&#xff0c;下面是学习过程中的笔记。一、OS模块主要对目录、或者文件操作。常用方法如下&#xff1a;os.listdir(p…

英伟达|jetson nano开发使用的基础详细分享

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;最近我朋友写了一篇英伟达开发板的文章&#xff0c;分享给大家。前言&#xff1a;最近拿到一块jetson nano 2GB版本的板子&#xff0c;折腾了一下&#xff0c;从烧录镜像、修改配件等&#xff0c;准备一篇开箱基础文章给大家…