作者:王玲 来源:CSDN博客   酷勤网收集 2007-08-26

摘要
  某局接口的中间件总是异常关闭,多则一天五六次,少则一两天一次,次数频繁,且无任何规律可言。

标题:*
由于内存访问侵犯导致中间件异常关闭
作者:*
王玲
 现象描述:* 
某局接口的中间件总是异常关闭,多则一天五六次,少则一两天一次,次数频繁,且无任何规律可言。
 告警信息:*
1、   查看drwtsn32.log,记录相关信息如下:
发生应用程序意外错误:
        应用程序: (pid=572)
        时间: 2007-3-7 @ 17:27:43.875
        意外情况编号: c0000005 (访问侵犯)
……
2.通过windbg分析dump信息,显示如下:
ChildEBP RetAddr Args to Child             
0157284c 0042260f 0157de14 01157fc9 00000062 MidwareServer!memcpy+0x33
015afe2c 00421fe9 01157f90 00000062 8324e884 MidwareServer!OnReply+0x1bf (CONV: cdecl) [d:\midwareserver\task\tasklist.cpp @ 768]
015afec0 00421f21 000ec960 01111cb0 000000b8 MidwareServer!CTaskList::TimerThread+0xb9 (CONV: thiscall) [d:\ midwareserver\task\tasklist.cpp @ 601]
015aff14 0044cf57 01111d20 0000101b 01111c30 MidwareServer!CTaskList::TimerThread+0x11 (CONV: cdecl) [d:\ midwareserver\task\tasklist.cpp @ 577]
015aff80 0043667d 000ec960 0000101b 0015ccb0 MidwareServer!_AfxThreadEntry+0xe3 (CONV: stdcall) [thrdcore.cpp @ 112]
015affb4 77e6987c 01111c30 0000101b 0015ccb0 MidwareServer!_beginthreadex+0xca
WARNING: Stack unwind information not available. Following frames may be wrong.
015affec 00000000 0043661e 01111c30 00000000 KERNEL32!SetThreadExecutionState+0x227
 原因分析:*
分析dump信息得知:在拷贝消息包的输入参数时,误将整个包的长度当成具体的输入数据的长度,而包的长度必然大于输入数据的长度,且数据又处于整个包结构的最后,所以在拷贝时就会拷取紧随消息包之后的一部分内存,而这部分内存地址一旦是受系统保护的内存地址的话,则造成访问侵犯,中间件程序会被系统异常关闭。
 处理过程:*
1、跟踪大量中间件日志,发现每次异常关闭并无任何特征及其规律可言。
2、查看事件查看器,发现每次应用程序异常关闭有dump日志记录,分析dump信息后确定问题所在。
3、修改程序,更新中间件后观察多天,运行正常无任何异常。
 建议与总结: 
典型的“差之毫厘,失之千里”,以此为诫
 
原文链接: http://blog.csdn.net/jter_007/archive/2007/08/16/1746748.aspx

分类: 中间件技术 应用服务器技术 Java技术 .NET技术

上一篇:中间件应具有如下的一些特点   下一篇:一个典型的应用:指标萃取中间层组件