分析案例:界面提示“基礎鏈接已經關閉:接收時發生錯誤”----本質為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:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_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 = ''

 

原來,最初反饋問題的功能執行時間太長,在此期間因為別的功能報出棧溢出錯誤,進而造成進程崩潰,所以才會出現最初看到的疑似網絡問題的錯誤!

 

問題結論: 

至此問題定位:未完全覆蓋所有條件場景,造成應用系統遞歸死循環!直至棧溢出!

解決問題的方法很簡單:數據庫庫對應字段設置為非空,或應用系統代碼中增加兼容性處理,增強系統自身的健壯性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM