一次进程异常重启问题定位

    最近在忙着做某公司的一个项目,临近测试节点,闲着没事,在那来回重启设备,结果发现,带流带配置重启了几次以后,会偶然出现某个进程重启的问题,进而导致这个进程下的所有业务功能都不可用,这下麻烦大了,临近测试了啊,没办法,只能周末加班突击解决了。

    问题出现的时候,没有任何调用栈信息被保存,从死机文件里面也得不到有效的异常信息。只能看到killed by signal 11,si code 2,除此之外就没有其它的有效信息了。只能分析这个信息,signal 11,很容易知道这是一个出现了内存错误的问题,一般出现内存被踩,或者空指针的时候,经常会见到。而si code 2,表示退出码是2,也就是说有可能是触发了exit(2)类似的函数调用。

    于是,只能先从代码入手,从上到下开始排查代码,并且很幸运的找到了类似的代码段。但是是在系统底层的函数调用,和我们的业务应该是不相关的。于是只能采用最原始的方法,挂gdb,设置断点,在进程重启的时候断住,但是由于问题不是必现的,所有只能不停的试,终于在重启了设备n次以后,gdb断在了业务的某个处理流程中,并且精确的打印出了出问题的代码行,经过仔细分析发现,原来是某个入参超过了数组的最大下标,导致数组越界。唉,C语言的大坑,仔细检查了代码,发现还有一个类似的错误,仔细修改并重新检查了代码以后,终于解决了这个重大的隐患。

    这给我提了个醒,以后写代码的时候,除了保证语法功能没问题外,还要注重数组的边界检查,重要的是,要注重测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,172评论 0 23
  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,512评论 1 14
  • 浅谈自学者或初学者如何鉴定自己的辨音能力 有些学外语的朋友,在学校或身边有专业人士,平时也许会些做辨音练习,或受专...
    月明西湖阅读 1,289评论 0 0
  • 前段时间,晚上炒了一盘花生米。有几年,自己都想不起来这道菜,如果这算是一道菜的话。 记的小时候,家里来...
    bangdidi阅读 402评论 0 0
  • 今天我拿出昨天做的树叶画,哇,我的天呐,萝卜的叶子都枯萎啦?干巴巴的卷在一起,我想起罗老师科学上讲的植物的...
    rx任曦阅读 377评论 0 2