• 分析案例:界面提示“基础链接已经关闭:接收时发生错误”----本质为StackOverflow


    问题描述:

           一个业务复杂、执行时间很长的功能,经常报出“基础链接已经关闭:接收时发生错误”,很是蹊跷。。。

    clip_image001

    image

    问题分析:

          首先,查阅应用服务器的系统日志,发现问题发生时总是会伴随着w3wp进程崩溃的错误,很有问题呀。。。

    image

    错误存储段 ,类型 0
    事件名称: APPCRASH
    响应: 不可用
    Cab Id: 0
    
    问题签名:
    P1: w3wp.exe
    P2: 7.5.7601.17514
    P3: 4ce7afa2
    P4: oracommon11.dll
    P5: 11.2.0.3
    P6: 4eb215cc
    P7: c00000fd
    P8: 00000000001714b3
    P9: 
    P10: 
    
    附加文件:
    
    可在此处获取这些文件:
    C:ProgramDataMicrosoftWindowsWERReportQueueAppCrash_w3wp.exe_7d10d2c9218567c5ec5b216598b20a1b57c250_54fec352
    
    分析符号: 
    重新检查解决方案: 0
    报告 Id: 48b4afbc-6dcf-11e6-b732-f4e9d489a2e0
    报告状态: 4
    哈希存储段: %22

         找到一个自动收集了dump的日志,打开查看错误信息,噢噢。。。。

    0:351> !pe -nested
    Exception object: 000000073fdb1158
    Exception type:   System.StackOverflowException
    Message:          <none>
    InnerException:   <none>
    StackTrace (generated):
    <none>
    StackTraceString: <none>
    HResult: 800703e9
    
    Nested exception -------------------------------------------------------------
    Exception object: 00000008c0a98f50
    Exception type:   System.Data.OracleClient.OracleException
    Message:  ORA-
    00001
    : 违反唯一约束条件 (LCXXXXX.PK_XXXXXXX)
    
    InnerException:   <none>
    StackTrace (generated):
        SP               IP               Function
        000000004E4AB990 000007FEF43B0458 System_Data_ni!System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(System.Data.Common.RowUpdatedEventArgs, BatchCommandInfo[], Int32)+0x19a0e8
        000000004E4ABA10 000007FEF4216295 System_Data_ni!System.Data.Common.DbDataAdapter.UpdatedRowStatus(System.Data.Common.RowUpdatedEventArgs, BatchCommandInfo[], Int32)+0x35
        000000004E4ABA40 000007FEF421550A System_Data_ni!System.Data.Common.DbDataAdapter.Update(System.Data.DataRow[], System.Data.Common.DataTableMapping)+0x92a
        000000004E4ABB20 000007FEF4215ED9 System_Data_ni!System.Data.Common.DbDataAdapter.UpdateFromDataTable(System.Data.DataTable, System.Data.Common.DataTableMapping)+0x39
        000000004E4ABB60 000007FEF4214AB5 System_Data_ni!System.Data.Common.DbDataAdapter.Update(System.Data.DataSet, System.String)+0xc5
        000000004E4ABBE0 000007FE9AD15365 UNKNOWN!xxxxx.Platform.Core.DataAccess.Oracle.OracleDatabase.DataBatchImportPart(System.Data.DataTable, System.String)+0x225
        000000004E4ABC80 000007FE9AD15093 UNKNOWN!xxxxx.Platform.Core.DataAccess.Database.DataBatchImport(System.Data.DataTable, System.String)+0xe3
        000000004E4ABCE0 000007FE9D2D339A UNKNOWN!xxxxx.Platform.AppFramework.CCMCore.XXXBatchLockDAC.AddBatchLock(System.Collections.Generic.List`1<xxxxx.Platform.AppFramework.CcmSPI.XXXLockData>, System.String ByRef, Boolean, System.String ByRef)+0x29a
        000000004E4ABDB0 000007FE9D2D304A UNKNOWN!xxxxx.Drp.Biz.Com.DataLockMgr.AddBatchLock(System.Collections.Generic.List`1<xxxxx.Platform.AppFramework.CcmSPI.XXXLockData>, System.String ByRef, System.String ByRef)+0x9a
        000000004E4ABE00 000007FE9D2D2D75 UNKNOWN!xxxxx.Drp.Biz.Com.DataLockMgr.AddBatchLock(System.Collections.Generic.List`1<xxxxx.Platform.AppFramework.CcmSPI.XXXLockData>, System.String, System.String ByRef)+0x45
    
    

        反编译现场的对应的DLL发现貌似存在递归调用???

    image

    image

    image

    对应的删除SQL

    delete from SYLOCK_APBill where SYLOCK_OWNERID = '0ae7c1e5-fc23-4ea7-ad34-9ca03fd2ea02' and SYLOCK_FUNCID = ''

    原来,最初反馈问题的功能执行时间太长,在此期间因为别的功能报出栈溢出错误,进而造成进程崩溃,所以才会出现最初看到的疑似网络问题的错误!

    问题结论: 

    至此问题定位:未完全覆盖所有条件场景,造成应用系统递归死循环!直至栈溢出!

    解决问题的方法很简单:数据库库对应字段设置为非空,或应用系统代码中增加兼容性处理,增强系统自身的健壮性。

  • 相关阅读:
    分页存储过程
    WinForm中DataGridView显示更新数据--人性版
    char类型的说明
    代码创建数据库_表--SqlServer数据库
    单例设计模式
    c#中的正则表达式
    sessionStorage 和 localStorage
    图片懒加载插件lazyload.js详解
    git安装加操作(转)
    php获取数据转换成json格式
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/5837633.html
Copyright © 2020-2023  润新知