2011-12-21 21 views
0

私はWebサービスに非常に奇妙な問題があります。セットアップは次のとおりです。x64シングルコアに6つのWebサービス、IIS7(win2008)で1GBのRAMマシンを展開し、それぞれ専用のアプリケーションプールで実行します。 Webサービスは、LBを介してmysqlクラスタに接続しています。私たちは、接続プーリングをオフにしてmysql odbc connector 5.1.6を使用しています.net v3.5。ターゲットプラットフォームx64をビルドします。 おおよそ3時間ごとに、1つのWebサービスが100%のCPUを消費し始めます(またはCPUコアの100%と言いますが、単一のコアマシンであるためCPUの100%になります)。同時に、mysqlサーバはアイドル状態です。タスクマネージャから "hanging" w3wpを実行してもヘルプが表示されない場合は、IISの再起動が役立ちます。私はプロセスエクスプローラを見て、私は理解できない次のスタックトレース、とW3WP内部の1つの奇妙なスレッドを見ている:asp.net web-service高いCPU使用率

ntoskrnl.exe!IoAcquireRemoveLockEx+0xe7 
ntoskrnl.exe!memset+0x22a 
ntoskrnl.exe!KeWaitForSingleObject+0x2cb 
ntoskrnl.exe!KeDetachProcess+0x120d 
ntoskrnl.exe!PsReturnProcessNonPagedPoolQuota+0x3a3 
ntoskrnl.exe!CcSetDirtyPinnedData+0x433 
myodbc5.dll!SQLTablePrivilegesW+0x22dac 
myodbc5.dll!SQLTablePrivilegesW+0x2bffd 
myodbc5.dll!SQLTablePrivilegesW+0x107ea 
odbc32.dll!SQLAllocHandle+0xba5 
odbc32.dll!SQLAllocHandle+0x9c8 
mscorwks.dll!IEE+0xa913 
System.Data.ni.dll+0x56f8c3 
System.Data.ni.dll+0x5c1efe 
mscorwks.dll!IEE+0xb0ee 
mscorwks.dll!CompareAssemblyIdentity+0x2bb8f 
mscorwks.dll!CompareAssemblyIdentity+0x39deb 
mscorwks.dll!CompareAssemblyIdentity+0xe63d 
mscorwks.dll!CertCreateAuthenticodeLicense+0x21b12f 
mscorwks.dll!StrongNameTokenFromPublicKey+0x49f7 
mscorwks.dll!PreBindAssembly+0x88a46 
mscorlib.ni.dll+0x3988d0 
mscorlib.ni.dll+0x39877a 
mscorwks.dll!IEE+0xb042 
mscorwks.dll!CompareAssemblyIdentity+0x2610d 
mscorwks.dll!CompareAssemblyIdentity+0x26358 
mscorwks.dll!CompareAssemblyIdentity+0x2ae50 
mscorwks.dll!CompareAssemblyIdentity+0x97ad7 
mscorwks.dll!CompareAssemblyIdentity+0x97877 
mscorwks.dll!CopyPDBs+0x170f3 
mscorwks.dll!InitializeFusion+0x5994 
mscorwks.dll!GetMetaDataInternalInterfaceFromPublic+0x34ad9 
mscorwks.dll!InitializeFusion+0x1282d 
mscorwks.dll!CorExitProcess+0x802d 
mscorwks.dll!InitializeFusion+0xb5db 
mscorwks.dll!CertCreateAuthenticodeLicense+0x240021 
mscorwks.dll!CompareAssemblyIdentity+0x97bcc 
mscorwks.dll!CompareAssemblyIdentity+0x97877 
mscorwks.dll!CreateAssemblyNameObject+0x2c29d 
mscorwks.dll!InitializeFusion+0x5994 
mscorwks.dll!GetMetaDataInternalInterfaceFromPublic+0x34ad9 
mscorwks.dll!InitializeFusion+0x1282d 
mscorwks.dll!StrongNameErrorInfo+0x130fe 
mscorwks.dll!InitializeFusion+0xbf48 
mscorwks.dll!StrongNameErrorInfo+0x76b0 
kernel32.dll!BaseThreadInitThunk+0xd 
ntdll.dll!RtlUserThreadStart+0x21 

は、私はまた、VS2010展開している他のマシン上で同じ問題を再現することができましたそしてW3WP「ハング」に接続することができましたし、そのGCのファイナライザスレッドは以下のようなスタックトレースで座っている見た:

[Native to Managed Transition] 
System.Data.dll!System.Data.Odbc.OdbcHandle.ReleaseHandle() 
[Native to Managed Transition] 
[Managed to Native Transition] 
mscorlib.dll!System.Runtime.InteropServices.SafeHandle.Dispose(bool disposing) 
mscorlib.dll!System.Runtime.InteropServices.SafeHandle.Finalize() 
[Appdomain Transition] 

そして、もう一つのスタックトレースが存在している、私は信じて最初の1の反射されます最後に。

my_SQLFreeStmtExtended strmov Highest 
myodbc5.dll!strmov(char * dst, const char * src) Line 38 + 0xd bytes  
myodbc5.dll!cli_safe_read(st_mysql * mysql) Line 731  
myodbc5.dll!cli_read_query_result(st_mysql * mysql) Line 2739 + 0x8 bytes 
myodbc5.dll!mysql_next_result(st_mysql * mysql) Line 5221 + 0xd bytes 
myodbc5.dll!my_SQLFreeStmtExtended(void * hstmt, unsigned short fOption, unsigned int clearAllResults) Line 427 + 0xc bytes  
odbc32.dll!000007fef1d43ee9()  
[Frames below may be incorrect and/or missing, no symbols loaded for odbc32.dll]  
odbc32.dll!000007fef1d43d3e()  
mscorwks.dll!000007fef102cd27() 
System.Data.ni.dll!000007feebe73ad3() 

この問題は、本番環境の16コアマシンでも再現可能です。 私たちは潜在的に接続が閉じられていて処分されなかった場所にコードレビューと固定/書き換えコードを実行しました。 この問題のお手伝いをしていただけると幸いです。

答えて

0

私たちはmysql connector odbcの代わりにmysql connector .netを使用することに決めました。 OdbcConnectionからMySqlConnection、OdbcCommandからMySqlCommand、OdbcParameterからMySqlParameterに変更されました。私たちはそれに対していくつかのランプアップテストを行い、安定性だけでなくパフォーマンスも向上したように見えます。 結論として、MySql Connector ODBCの代わりにMySql Connector .NETを使用してください。

0

Redgate Ants Performance Profilerの無料試用版を作成することができます。コードにボトルネックがある場合は、クローズされていない接続かどうかを正確に指示する必要があります。完了したらアンインストールしてください。

これは、スタックトレース:)幸運をhelps-

希望よりも役に立つかもしれません!