ASP.NET Web アプリケーションで OOM の問題をデバッグしています。perfmon カウンターを使用して、管理されていない領域に問題があることを特定しました。そこで、Debugdiag を使用してダンプを生成し、そこからメモリ プレッシャ分析レポートを作成しました。
概要:
oracommon10.dll は、270.16 MB 相当の未処理の割り当てを担当しています。
先頭へ メモリーを消費する関数: oracommon10!sktsfMalloc+c: 270.16 MB相当の未処理の割当て。
関数: oracommon10!sktsfMalloc+c
割り当てタイプ C/C++ ランタイム割り当て
割り当て数 455 個の割り当て
割り当てサイズ 270.16 MB
リーク確率 95%
以下のコール スタックのサンプル (最上位の .Net コールの後にネイティブ コールを含めました) から、これを理解するのに役立つ人がいますか? これは、閉じられていない Oracle 接続の 1 つに問題がある可能性があると想定しています。
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)