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

问题出现的现象

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

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

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

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

echo -100 > /proc/$PID/oom_score_adj

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

export TERM=linux
 

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

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

所以,不是应用的问题。

系统部分分析

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

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

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

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

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

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

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

关于这个问题的一些思考

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

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

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

最后还是辉哥,yyds。

还是周末我也不想说周末,但是不是周末的话,可能也没有特别清净的时间来处理困难的问题。这周末我是要加班的,加班的前一个晚上,我领导找我们吃了一个便饭,聊了很多东西,这篇文章我就不说了,会在下... 1. 死机/phong hang 定义 当手机长时间无法再被用户控制操作时,我们称为死机或者hang 机。 在这里我们强调长时间,如果是短时间,我们归结为Perfomance 问题,即性能问题. 2. 死机表现 * 用户操作手机无任何响应, 如触摸屏幕,按键操作等. * 手机屏幕黑屏, 无法点亮屏幕. * 手机界面显示内容和用户输入风马牛不相及. 可能导致死机的原因 1. ... init: Waiting for /dev/.coldboot_done... [ 3.024810] init: Waiting for /dev/.coldboot_done took 0.00s. [ 3.024848] init: /dev/hw_random not found... RockChip平台当时使用的Bluez-Alsa代码已经比较老了,但由于RK内部维护了一些补丁,因此并未直接使用同步最新的Bluez-Alsa代码,而是沿用老版本的代码。老版本代码存在一些BUG(新版本可能已经修复),本文就记录使用BT Souce功能时,播放会卡住,然后整个线程都被阻塞。此时调节蓝牙音量也是阻塞状态。现象log(阻塞在Connecting…): 原因:因多处对...
现象:低温-40度插着适配器(适配器放低温箱内),机器亮屏连续工作一小时左右出现死机现象(屏不亮,短按电源按键无法开机,需强制关机后才能开机)。 部分死机log: [ 4.141791] [drm] No driver support for vblank timestamp query. [ 4.147718] vendor storage:20160801 ret = 0 [ 4.618697] [ffffff7f9244f120] *pgd=0000000000000000, *pu...
CVE-2022-22720是一个已知的漏洞,可能会影响您的系统安全。为了修复该漏洞,您可以按照以下步骤进行: 1. 更新软件包:首先,确保您的系统上安装了最新版本的软件包。使用适用于您的操作系统的软件包管理工具(例如yum、apt、zypper等)进行更新。 2. 升级httpd:如果您在使用httpd服务器,请确保将其升级到最新版本。检查您的软件包管理工具以获取可用的更新版本,并执行相应的升级命令。 3. 应用补丁:检查CVE-2022-22720漏洞的相关补丁是否已经发布。如果有可用的补丁,请下载并应用到您的系统中。遵循补丁提供的说明和命令来正确应用补丁。 4. 配置安全措施:除了更新软件和应用补丁之外,您还可以采取其他安全措施来增强系统的安全性。这可能包括配置防火墙规则、使用安全策略和权限控制、定期备份数据等。 5. 监控和审计:定期监控系统和应用程序的日志,并进行安全审计。这可以帮助您及时发现任何异常活动,并采取适当的措施应对。 请注意,具体的修复步骤可能因您使用的操作系统和软件版本而有所不同。因此,在执行上述步骤之前,请确保参考适用于您的系统的官方文档和建议。