文章目录
  1. 1. 前言
  2. 2. 事情经过
    1. 2.1. 2014-12-26
      1. 2.1.1. 事件描述
      2. 2.1.2. 问题原因
      3. 2.1.3. 致谢
    2. 2.2. 2016
      1. 2.2.1. 事件描述
      2. 2.2.2. 问题原因
  3. 3. Valgrind

前言

Valgrind本是程序员界的瑞士军刀已经是老生常谈了,很久很久以前就一直想写一个专题来专门介绍一下Valgrind,但一直没有找到机会.

今天写这个总结,主要是记录一下当遇到常见且不易发现的程序问题时,一定要记得还有一个叫Valgrind的工具可以供你使用!

事情经过

2014-12-26

事件描述

某某公司线上机发生大规模同一时间点CORE掉,切记是基本处于同一机房同一机架的线上机同时CORE掉,发生周期固定,可能是每周一次,也可能是每月一次,其它机房同一时间点没有任何问题。

问题原因

问题原因:当处于特定网络请求环境下,产生程序内部异常。这一特定网络请求,不是正常理论所能假设的,即在正常的理论下,是不可能存在的,也不可能有Client能够发出这一请求,所以很容易被程序员们所忽略。比如:

  • 处于应用层协议的网络服务,如HTTP或HTTP2/SPDY等,是否可以对错误的请求进行容错。即当发生在理论上不能够判断为HTTP协议的请求进行多层伪装,让你的服务识别为正确的协议了,进而导致不可预知的错误。
  • 处于传输层交换数据的网络服务,是否容错了非正常TCP/UDP请求的伪装。
  • 处于网络层与数据链路层的网络服务,是否容错了非正常的BT请求伪装(这种情况在网络服务上也很少见,发生错误的可能性更大)。

致谢

伪装请求是一个更具有技术难度的活,不是一般人可以达到的。不过这也成就了更可靠的服务引擎设计,更大的容错性。在此一并致谢那些试图攻击、入侵公司服务器的..客们,也更感谢..公司信息安全部的大力扫描,有了你们,才能够发现正常测试同学进行性能压测所发现不了的问题,对于上述事件,..公司压力测试可以进行了为期二个月,也并未发现任何问题,可就是线上不定期CORE掉,最长发生周期达六个月。

2016

事件描述

当一个可执行程序A动态链接了动态链接库B,编译期B的版本为1.0,编译通过,执行成功。但线上安装包时,安装成功,服务正常启动。只是当特定处理逻辑执行时,直接挂掉,服务异常停止,切记不是CORE掉,自然也没有CORE文件产出,即使设置了ulimit -c unlimited.

问题原因

问题原因:线上机执行环境B安装了错误版本,与编译期使用版本不一致。比如:安装了B的0.8版本,导致一些对象在低版本上未定义
,此时会导致执行到new时,可能会发生程序异常退出。但不会CORE掉,较难定位问题原因。

Valgrind

发上事件描述问题较难定位,但均可通过Valgrind轻松解决. 在此,本人只是推荐这个工具而已,具体使用方法可参考官方文档。有任何问题,欢迎交流.

出于商业原则,以上问题已经针对具体事实作了必要屏蔽,还请谅解。

文章目录
  1. 1. 前言
  2. 2. 事情经过
    1. 2.1. 2014-12-26
      1. 2.1.1. 事件描述
      2. 2.1.2. 问题原因
      3. 2.1.3. 致谢
    2. 2.2. 2016
      1. 2.2.1. 事件描述
      2. 2.2.2. 问题原因
  3. 3. Valgrind