来源:http://blog.csdn.net/lezhiyong
问题:
在某项目的测试过程中,测试在高清压力测试过程中会偶尔出现RSS崩溃现象,崩溃时间不确定,由于在守护进程服务的守护下,RSS崩溃后被重新拉起,所以这个故障在崩溃马上发送时在网管上并没有体现服务停止的告警,只有当测试人员去RSS的var/run目录下找到edum***开头的文件才指定RSS发送崩溃。根据文件中提供的崩溃时间描述,有时是几天前的,有时是几个小时前的,测试人员较难回忆其当时做了什么操作。根据多个edum***文件打印出的崩溃时堆栈信息,每次崩溃出现在不同的调用代码逻辑中。这都给该问题的复现与定位造成一定困难。
问题根源:
崩溃线程崩中使用指针的真正创建与销毁地方在另另外一个线程中,崩溃线程只是使用这个指针拷贝。
这两个操作发送在两个线程中。
问题总结:
对于野指针问题,当问题根源找到时觉得问题比较轻松,但未找到前的排查真正做起来很累,更多是考验定位人员的心理素质和分析能力,总结的一些经验如下:
1、需要从崩溃点上层各个调用对象作为中介从来源到去处引起共用指针的,要细心、耐心,把来源和去处一层层追根朔源才能发现问题。
2、要善于分析日志文件中提供的信息,当第一次崩溃是由于日志输出等级低信息量不足并且不能定位与解决该问题时候需要将日志输出等级调高并加入一些辅助定位的输出信息,在下一次崩溃时候输出的日志信息将提供很大帮助。
3、解决野指针问题通过阅读代码很重要,只有这样才能对出问题时候程序线程运行的数量、运行功能和时序以及变量调用有清楚和全面的认识。
4、编写程序时候尽量少用指针拷贝,如果不得以使用,编写代码一定要具备要有多线程运行意识,从根源上杜绝野指针的出现。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-09 23:59:31