linux之如何定位难重现的内核飞掉的问题
2016-10-11 23:22
369 查看
本人曾参与过一个大型交换机设备的开发,平台是基于linux内核态的开发,而所用芯片的SDK又号称不再支持内核态。导致调试时经常偶然性就飞掉。调度栈显示都莫名其妙。
这种一般就是内核栈空间被用光了,如果不是栈空间用光,(内存越界等问题)其oop相应显示还是会比较正常。
问题解决思路,既然是怀疑是内核栈空间被用光了,我们就先查查相应代码谁用了大的栈空间呗?
有的人可能直接说咱看代码吧,谁用了大的临时变量等一看不就好了么。不好意思,大学生里的小代码量你这样做可以。一般项目里的代码你一辈子都看不清也看不透所有的代码的临时变量。而且嵌套了函数调用,涉及到编译优化的问题,再你看来简单的临时变量的函数有可能占用很大的栈空间。
1第一步是将软件包的KO直接反汇编。:objdump -s *.ko > 1.txt
2.用正则表达式直接把stwa 数据大于500的那前后几行过滤出来输出到文件2.txt
3.然后再用相关命令将2.txt的行排序
4从大到小去解决相应的函数的临时变量,大的临时变量改成内存申请或者静态变量的方式。注意内存申请的方式要注意内存的释放。
note:编译器编译的时候经常会把static函数直接当做代码块变异到调用函数里,可能导致调用函数的临时变量特别大。这也是要注意的一点,如果一个函数调用了很多静态函数,要注意此类的问题。
最好的解决方法,还是跑在用户态吧。
这种一般就是内核栈空间被用光了,如果不是栈空间用光,(内存越界等问题)其oop相应显示还是会比较正常。
问题解决思路,既然是怀疑是内核栈空间被用光了,我们就先查查相应代码谁用了大的栈空间呗?
有的人可能直接说咱看代码吧,谁用了大的临时变量等一看不就好了么。不好意思,大学生里的小代码量你这样做可以。一般项目里的代码你一辈子都看不清也看不透所有的代码的临时变量。而且嵌套了函数调用,涉及到编译优化的问题,再你看来简单的临时变量的函数有可能占用很大的栈空间。
1第一步是将软件包的KO直接反汇编。:objdump -s *.ko > 1.txt
2.用正则表达式直接把stwa 数据大于500的那前后几行过滤出来输出到文件2.txt
3.然后再用相关命令将2.txt的行排序
4从大到小去解决相应的函数的临时变量,大的临时变量改成内存申请或者静态变量的方式。注意内存申请的方式要注意内存的释放。
note:编译器编译的时候经常会把static函数直接当做代码块变异到调用函数里,可能导致调用函数的临时变量特别大。这也是要注意的一点,如果一个函数调用了很多静态函数,要注意此类的问题。
最好的解决方法,还是跑在用户态吧。
相关文章推荐
- 如何定位"无法重现“的问题
- java问题导致linux负载、cpu过高如何定位
- 【嵌入式Linux学习七步曲之第四篇 Linux内核移植】用BDI2000快速定位PPC Linux内核Uncompressing Kernel Image ... OK后无输出问题
- linux 下如何定位代码问题
- [Linux]当一个棘手问题需要即可定位,如何协助开发,缩小定位范围
- linux中的dmesg命令简介------没有core文件时如何定位core dump问题
- Linux下java进程CPU占用率高如何定位问题
- Linux 2.6.17和更高内核中如何解决超时问题[zt]
- linux下如何定位CPU占用高的进程的问题点
- 在Cygwin环境下配置Linux内核的问题
- 解决编译linux2.4和linux 2.6内核出现/usr/bin/ld: cannot find -lncurses的问题
- 在Cygwin环境下配置Linux内核的问题——解决方案!
- 深度介绍Linux内核是如何工作的
- 如何成为一个Linux内核开发者
- 如何成为一个Linux内核开发者
- 独家:深度介绍Linux内核是如何工作的
- 深度介绍Linux内核是如何工作的
- 独家:深度介绍Linux内核是如何工作的
- 如何快速定位页面中复杂 CSS BUG 问题
- 如何解决 linux 操作系统显示中文乱码问题?