解决aix下的core问题

C开发手记系列一:

解决aix下的core问题

今天收到了生产运维的紧急QC问题,一个数据抽取接口的tuxedo服务core掉了。

使用dbx命令查看core内容为:

$ dbx custnpa
Type 'help' for help.
warning: The core file is not a fullcore. Some info may
not be available.
[using memory image in core]
reading symbolic information ...

Segmentation fault in pthread_kill at 0x9000000005bd71c
0x9000000005bd71c (pthread_kill+0x88) e8410028          ld   r2,0x28(r1)
(dbx) where
pthread_kill(??, ??) at 0x9000000005bd71c
_p_raise(??) at 0x9000000005bd130
skgesigOSCrash(??) at 0x900000000ec16fc
kpeDbgSignalHandler(??, ??) at 0x900000000f2db18
skgesig_sigactionHandler(??, ??, ??) at 0x900000000ec1a84
noname.strlen() at 0x900000000056100
_doprnt(??, ??, ??) at 0x90000000004b43c
sprintf(0xffffffffff1b590, 0x9001000a4a48fd0, 0x32333c2f42697274, 0x74, 0xffffffff80808080, 0x6e743e00, 0x43, 0xfffffffffff3348) at 0x900000000049038
cfc_GetNodeSet(strTag = warning: Unable to access address 0x32333c2f42697274 from core
(invalid char ptr (0x32333c2f42697274)), strXml = warning: Unable to access address 0x68446174653e3c49 from core
(invalid char ptr (0x68446174653e3c49)), stNodeSet = 0x644e6f3e33353032, errstr = warning: Unable to access address 0x3132323030353132 from core
(invalid char ptr (0x3132323030353132))), line 33 in "xxxxxxxx.pc"
(dbx) 

 初步可以定位到错误程序段。

1,在本地写了个tuxedo client端模拟程序调用服务,服务正常调用,也未core掉,也未见异常。,

2,查看代码也无不正确的操作。

3,因为该数据接口数据量较大,怀疑为内存溢出引起访问的错误。

4,在模拟客户端增加十倍的数据量。错误重现,果然是数据量过大的问题。

5,遂将函数中的几个临时变量调大十倍,再用客户端试了一下,一切正常。

总结:

此问题虽然最终解决方案很简单,但在定位错误的时候走了不少弯路,特别是运维人员未提供有core信息的时候,根本无从下手。

在此,一方面可以看出,在系统生产运营的过程中,运维人员的经验对运维效率起了决定性作用。同时可以看出在生产环境中异构系统的排错异常艰难。

另:如果能熟悉aix core dump 可能会很快定位问题的根本原因。

这篇文章本身可能给不了大家实际帮助,我只是记录下来,供日后工作参考。

有一篇IBM网站上的关于core dump分析的文章,相信会给大家带来帮助。

http://www.ibm.com/developerworks/cn/aix/library/0806_chench_core/index.html

猜你喜欢

转载自xiaoming530.iteye.com/blog/1160828