0

今日、問題が発生しました。本番 Web サーバーの iis 接続が非常に高く、CPU とメモリは通常のレベルにあります。Zabbix (オープンソースの監視ソフトウェア、サーバー/パフォーマンス カウンターからデータを収集し、Web 上に表示) から、多くの「ASP.NET Requests Queued (パフォーマンス カウンター)」が表示されます。サーバーからダンプを取得します。DebugDiag2.2 を使用して、ダンプを自動的に分析します。それは次のように報告しています。

このスレッドは HttpWebRequest を作成し、リモート サーバーからの応答を待機しています。これらの要求の 1 つ以上が、使用可能な接続の最大数の少なくとも半分を使用しています。

警告、利用可能な接続の少なくとも半分が使用されています

HttpRequest URI: http://ws.product.aaa.bbb.com/product.search/api/x-protobuf/SearchData ServicePoint - ConnectionLimit:32 CurrentConnections:31

しばらくグーグルで検索すると、「asp-net-performance-case-study-web-service-calls-taking-forever」と「.NET で Web リクエストを作成するときのタイムアウト」のリンクが見つかります。

私のサーバーは .net 4 を使用しています。手順に従って、Zabbix で描画された iis 接続である waitList をダンプしようとしています。

0:048> !dumpheap -type System.Net.ConnectStream
         Address               MT     Size
000000d2395e0fe8 00007ffbc6052c70      176     
000000d2395e1148 00007ffbc6055440       24     
000000d2395f5780 00007ffbc6052c70      176  



/*dump the ConnectStream to find m_connection   */
0:048> !do 000000d2395e0fe8
Name:        System.Net.ConnectStream
MethodTable: 00007ffbc6052c70
EEClass:     00007ffbc5d29f78
Size:        176(0xb0) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
...
00007ffbc6f737c8  4001d16       78         System.Int32  1 instance                3 m_CallNesting
00007ffbc60649e0  4001d17       20 ...tterGatherBuffers  0 instance 000000d2395e1098 m_BufferedData
00007ffbc6f6f370  4001d18       9c       System.Boolean  1 instance                0 m_SuppressWrite
00007ffbc6f6f370  4001d19       9d       System.Boolean  1 instance                1 m_BufferOnly
00007ffbc6f92ac0  4001d1a       68         System.Int64  1 instance 0 m_BytesLeftToWrite
00007ffbc6f737c8  4001d1b       7c         System.Int32  1 instance                0 m_BytesAlreadyTransferred
00007ffbc6051148  4001d1c       28 ...em.Net.Connection  0 instance 000000d53828cf18 m_Connection
00007ffbc6f766d0  4001d1d       30        System.Byte[]  0 instance 0000000000000000 m_ReadBuffer
00007ffbc6f737c8  4001d1e       80         System.Int32  1 instance                0 m_ReadOffset
00007ffbc6f737c8  4001d1f       84         System.Int32  1 instance                0 m_ReadBufferSize
00007ffbc6f92ac0  4001d20       70         System.Int64  1 instance 0 m_ReadBytes
00007ffbc6f6f370  4001d21       9e       System.Boolean  1 instance                0 m_Chunked
00007ffbc6f737c8  4001d22       88         System.Int32  1 instance                2 m_DoneCalled
00007ffbc6f737c8  4001d23       8c         System.Int32  1 instance                2 m_ShutDown
00007ffbc6f70e08  4001d24       38     System.Exception  0 instance 0000000000000000 m_ErrorException
00007ffbc6f6f370  4001d25       9f       System.Boolean  1 instance                0 m_ChunkEofRecvd
00007ffbc6057300  4001d26       40 ...m.Net.ChunkParser  0 instance 0000000000000000 m_ChunkParser
00007ffbc6071f28  4001d27       90         System.Int32  1 instance                3 m_HttpWriteMode
00007ffbc6f737c8  4001d28       94         System.Int32  1 instance           300000 m_ReadTimeout
00007ffbc6f737c8  4001d29       98         System.Int32  1 instance           300000 m_WriteTimeout
00007ffbc6052760  4001d2a       48 ...estLifetimeSetter  0 instance 0000000000000000 m_RequestLifetimeSetter
00007ffbc6f7c8c8  4001d2b       50 System.AsyncCallback  0 instance 000000d2395e10c8 m_ReadCallbackDelegate
00007ffbc6f7c8c8  4001d2c       58 System.AsyncCallback  0 instance 000000d2395e1108 m_WriteCallbackDelegate
00007ffbc60a4850  4001d2f       60 ...et.HttpWebRequest  0 instance 000000d2395e0338 m_Request
00007ffbc6f6f370  4001d31       a0       System.Boolean  1 instance                0 m_IgnoreSocketErrors
00007ffbc6f6f370  4001d32       a1       System.Boolean  1 instance                0 m_ErrorResponseStatus



/*find m_connection, then to dump the waitlist */
0:048> !do 000000d53828cf18 
Name:        System.Net.Connection
MethodTable: 00007ffbc6051148
EEClass:     00007ffbc5cc1ff8
Size:        296(0x128) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
....
00007ffbc6f6f370  4001c6d       5c       System.Boolean  1 instance                0 m_CheckLifetime
00007ffbc6f87580  4001c6e       60      System.TimeSpan  1 instance 000000d53828cf78 m_Lifetime
00007ffbc6f87af8  4001c6f       68      System.DateTime  1 instance 000000d53828cf80 m_CreateTime
00007ffbc6f6f370  4001c70       5d       System.Boolean  1 instance                0 m_ConnectionIsDoomed
00007ffbc6075a30  4001c71       20 ...et.ConnectionPool  0 instance 0000000000000000 m_ConnectionPool
00007ffbc6f874e0  4001c72       28 System.WeakReference  0 instance 000000d53828d040 m_Owner
00007ffbc6f737c8  4001c73       58         System.Int32  1 instance               -1 m_PooledCount
00007ffbc6f6f370  4001c74       5e       System.Boolean  1 instance                0 m_Initalizing
00007ffbc6099378  4001c75       30 System.Net.IPAddress  0 instance 000000d238ee5040 m_ServerAddress
00007ffbc60546e0  4001c76       38 ...ets.NetworkStream  0 instance 000000d53828d058 m_NetworkStream
00007ffbc609b3c0  4001c77       40 ...et.Sockets.Socket  0 instance 0000000000000000 m_AbortSocket
00007ffbc609b3c0  4001c78       48 ...et.Sockets.Socket  0 instance 0000000000000000 m_AbortSocket6
00007ffbc6f6f370  4001c79       5f       System.Boolean  1 instance                1 m_JustConnected
00007ffbc6053ad0  4001c7a       50 ...eralAsyncDelegate  0 instance 000000d53828d218 m_AsyncCallback
00007ffbc6099bc8  4001ccb       e0         System.Int32  1 instance                0 m_Error
00007ffbc6f70e08  4001ccc       70     System.Exception  0 instance 0000000000000000 m_InnerException
00007ffbc6f737c8  4001ccd       e4         System.Int32  1 instance                7 m_IISVersion
00007ffbc6f766d0  4001cce       78        System.Byte[]  0 instance 000000d5390cca00 m_ReadBuffer
00007ffbc6f6f370  4001ccf      104       System.Boolean  1 instance                1 m_ReadBufferFromPinnableCache
00007ffbc6f737c8  4001cd0       e8         System.Int32  1 instance                0 m_BytesRead
00007ffbc6f737c8  4001cd1       ec         System.Int32  1 instance                0 m_BytesScanned
00007ffbc6f737c8  4001cd2       f0         System.Int32  1 instance              505 m_TotalResponseHeadersLength
00007ffbc6f737c8  4001cd3       f4         System.Int32  1 instance            65536 m_MaximumResponseHeadersLength
00007ffbc6f92ac0  4001cd4       d8         System.Int64  1 instance -1 m_MaximumUnauthorizedUploadLength
00007ffbc6053fc8  4001cd5       80 ....CoreResponseData  0 instance 000000d239a4a930 m_ResponseData
00007ffbc605fd38  4001cd6       f8         System.Int32  1 instance                0 m_ReadState
00007ffbc6056670  4001cd7       88 ...+StatusLineValues  0 instance 000000d53828d168 m_StatusLineValues
00007ffbc6f737c8  4001cd8       fc         System.Int32  1 instance                5 m_StatusState
00007ffbc5c8b0c8  4001cd9       90 ...istItem, System]]  0 instance 000000d53828d098 m_WaitList
00007ffbc6f87260  4001cda       98 ...ections.ArrayList  0 instance 000000d53828d0c0 m_WriteList
00007ffbc6f81430  4001cdb       a0  System.IAsyncResult  0 instance 0000000000000000 m_LastAsyncResult
00007ffbc6063a50  4001cdc       a8 ...TimerThread+Timer  0 instance 000000d53828d190 m_RecycleTimer
00007ffbc607e258  4001cdd      110 ...Net.WebParseError  1 instance 000000d53828d028 m_ParseError
00007ffbc6f6f370  4001cde      105       System.Boolean  1 instance                1 m_AtLeastOneResponseReceived
00007ffbc6056328  4001ce3       b0 ...HttpAbortDelegate  0 instance 000000d53828d0e8 m_AbortDelegate
00007ffbc6056100  4001ce4       b8 ...t.ConnectionGroup  0 instance 000000d2384cdc18 m_ConnectionGroup
00007ffbc6056f58  4001ce5       c0 ...onnectionDelegate  0 instance 000000d53828d128 m_ConnectionUnlock
00007ffbc6f87af8  4001ce6      118      System.DateTime  1 instance 000000d53828d030 m_IdleSinceUtc
00007ffbc60a4850  4001ce7       c8 ...et.HttpWebRequest  0 instance 0000000000000000 m_LockedRequest
00007ffbc60a4850  4001ce8       d0 ...et.HttpWebRequest  0 instance 0000000000000000 m_CurrentRequest
00007ffbc6f6f370  4001ce9      106       System.Boolean  1 instance                1 m_CanPipeline
00007ffbc6f6f370  4001cea      107       System.Boolean  1 instance                1 m_Free
00007ffbc6f6f370  4001ceb      108       System.Boolean  1 instance                1 m_Idle
00007ffbc6f6f370  4001cec      109       System.Boolean  1 instance                1 m_KeepAlive
00007ffbc6f6f370  4001ced      10a       System.Boolean  1 instance                0 m_Pipelining
00007ffbc6f737c8  4001cee      100         System.Int32  1 instance                0 m_ReservedCount
00007ffbc6f6f370  4001cef      10b       System.Boolean  1 instance                1 m_ReadDone
00007ffbc6f6f370  4001cf0      10c       System.Boolean  1 instance                1 m_WriteDone
00007ffbc6f6f370  4001cf1      10d       System.Boolean  1 instance                0 m_RemovedFromConnectionList
00007ffbc6f6f370  4001cf2      10e       System.Boolean  1 instance                0 m_NonKeepAliveRequestPipelined
00007ffbc6f6f370  4001cf3      10f       System.Boolean  1 instance                0 m_IsPipelinePaused

ウエストリストを見つけましたが、サイズが 0 です。

0:048> !do 000000d53828d098
Name:        System.Collections.Generic.List`1[[System.Net.Connection+WaitListItem, System]]
MethodTable: 00007ffbc5c8b0c8
EEClass:     00007ffbc69b8c48
Size:        40(0x28) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffbc6f71250  4000cd1        8      System.Object[]  0 instance 000000d43805cb70 _items
00007ffbc6f737c8  4000cd2       18         System.Int32  1 instance                0 _size
00007ffbc6f737c8  4000cd3       1c         System.Int32  1 instance                0 _version
00007ffbc6f711b8  4000cd4       10        System.Object  0 instance 0000000000000000 _syncRoot

foreach ループを使用してすべての待機リストをダンプします。

.foreach ( obj {!dumpheap -mt 00007ffbc6051148 -short}){.echo ******************; !do poi(${obj}+0x90) }
....
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffbc6f71250  4000cd1        8      System.Object[]  0 instance 000000d43805cb70 _items
00007ffbc6f737c8  4000cd2       18         System.Int32  1 instance                0 _size

....

出力では、_size=0 および _items =000000d43805cb70 です。

今のところ、「Queued Requests」がどこにあるのかわかりません。調べるのを手伝ってくれませんか?

4

0 に答える 0