我正在調試ASP.NET Web應用程序中的OOM問題。使用perfmon計數器,發現未處理空間存在問題。因此,我使用Debugdiag生成轉儲並從中創建內存壓力分析報告。識別導致內存泄漏的原生方法
摘要:
oracommon10.dll負責270.16兆字節值得傑出分配。
頂部內存消耗功能: oracommon10!sktsfMalloc + c:270.16 MBytes未完成的分配。
功能:!oracommon10 sktsfMalloc + C
分配類型C/C++運行時分配(一個或多個)
分配次數455分配(多個)
分配大小270.16兆字節
泄漏概率95%
從下面的調用堆棧示例(在最頂級的.Net調用之後,我包含了本地調用),有人能幫我理解這一點嗎? 我認爲這可能是Oracle連接之一未關閉的問題。
Function Source Destination
oracommon10!sktsfMalloc+c msvcr71!malloc
orageneric10!kghaex+5ef
ntdll!ZwSetEventBoostPriority+c
ntdll!RtlpUnWaitCriticalSection+22
OraClient10!kpuinit0+a5c
OraClient10!kpuenvcr+ea
OraClient10!OCIEnvCreate+3d
oci!OCIEnvCreate+2a
0x1CE2A1F
mscorwks+3ad8
System.Data.OracleClient.OciHandle..ctor(System.Data.OracleClient.OciHandle, HTYPE, MODE, HANDLEFLAG)
System_Data_OracleClient_ni+e1d38
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionPool, System.Data.Common.DbConnectionOptions)
System.Data.OracleClient.OracleConnection.Open()
Microsoft.Practices.EnterpriseLibrary.Data.Database.GetNewOpenConnection()
Microsoft.Practices.EnterpriseLibrary.Data.Database.GetOpenConnection(Boolean)
Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(System.Data.Common.DbCommand)
Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase.ExecuteReader(System.Data.Common.DbCommand)
MyDAL.MyMethod(System.String, System.String, Int32)
歡迎來到StackOverflow。請編輯你的問題上的標籤,以表明你正在使用什麼編程語言(很明顯你使用的是.NET語言,但是直到你真正打開這個問題,許多人可能會回答這個問題就不會感到困擾)。沒有其他標籤的「內存」是相當無意義的。添加適當的標籤可以幫助人們瞭解您的問題,並提高您獲得答案的機會。 – 2012-08-01 23:38:08
您確定連接正在關閉嗎? – 2012-08-01 23:55:23
解決了很久以前的問題,但忘記在這裏更新。問題出現在代碼的另一部分,允許用戶通過鍵入三個或更多字符進行搜索。邏輯中的一個錯誤,啓動了對數據庫的調用,以從表中獲取所有行。當代碼被擊中後,非託管空間開始填充,私有字節瘋狂地爆發,直到應用程序崩潰。 – Aras 2013-11-14 17:23:12