Problembehandlung bei AppFabric-Skalierungsproblemen (Intermittent ErrorCode & lt; ERRCA0017 & gt;: SubStatus & lt; ES0006 & gt; -Fehler)

Haben wir umgesetzt AppFabric für Windows Server-Cache für unsere web-Anwendung. Zunächst konnten wir den cache ohne Probleme. Wir stiegen dann Datenverkehr etwa 100 Falten, und begann erleben intermittierende Ausnahmen. Die Ausnahmen auftreten, etwa einmal pro 2 Tage, für etwa eine minute zu einer Zeit.

Unserer Konfiguration:

  • 9 web-Server einsetzen/abrufen von Objekten, die im cache:
    • Meist zeitlichen 500 byte operative Objekte des Typs
    • Mit 1 benannte region
    • Gespeicherten Objekte mit den tags
    • Abgerufen in der Masse für einen bestimmten tag
  • Cache-Cluster:
    • 1 host (Blei) AppFabric 1.1 (version berichtet von get-cachehost 3)
    • - SQL-Konfiguration-provider
    • 96GB RAM auf dem host, die Standard-50% (48GB) zugeordnet AppFabric
    • Cache Host Config
    • Cache Client Config

Den Fehler in der Reihenfolge, in der Sie auftreten (die Ausnahmen sind, treten jede der neun Webserver während der 1-Minuten-Zeitraum):

  • System.Net.Sockets.SocketException : Eine vorhandene Verbindung wurde zwangsweise geschlossen durch remote-host
    Microsoft.ApplicationServer.- Caching.DataCacheException: ErrorCode<ERRCA0016>:SubStatus<ES0001>:The connection was terminated, possibly due to server or network problems or serialized Object size is greater than MaxBufferSize on server. Result of the request is unknown. ---> System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:15:00'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
    --- End of inner exception stack trace ---
    at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
    at System.ServiceModel.Channels.FramingDuplexSessionChannel.EndReceive(IAsyncResult result)
    at Microsoft.ApplicationServer.Caching.WcfClientChannel.CompleteProcessing(IAsyncResult result)
    --- End of inner exception stack trace ---
    at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ResponseBody respBody)
    at Microsoft.ApplicationServer.Caching.DataCache.GetNextBatch(String region, DataCacheTag[] tags, GetByTagsOperation op, IMonitoringListener listener, Byte[][]& state, Boolean& more)
    at Microsoft.ApplicationServer.Caching.CacheEnumerator.MoveNext()
    at System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext()
    at System.Linq.Enumerable.<ExceptIterator>d__99'1.MoveNext()
    at System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
    at System.Linq.Enumerable.ToList[TSource](IEnumerable'1 source)

  • Microsoft.ApplicationServer.- Caching.DataCacheException:
    ErrorCode<ERRCA0017>:SubStatus<ES0006>:There is a temporary failure. Please retry later. (One or more specified cache servers are unavailable, which could be caused by busy network or servers. For on-premises cache clusters, also verify the following conditions. Ensure that security permission has been granted for this client account, and check that the AppFabric Caching Service is allowed through the firewall on all cache hosts. Also the MaxBufferSize on the server must be greater than or equal to the serialized object size sent from the client.)
    at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ResponseBody respBody)
    at Microsoft.ApplicationServer.Caching.DataCache.GetNextBatch(String region, DataCacheTag[] tags, GetByTagsOperation op, IMonitoringListener listener, Byte[][]& state, Boolean& more)
    at Microsoft.ApplicationServer.Caching.CacheEnumerator.MoveNext()
    at System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext()
    at System.Linq.Enumerable.<ExceptIterator>d__99'1.MoveNext()
    at System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
    at System.Linq.Enumerable.ToList[TSource](IEnumerable'1 source)

  • Microsoft.ApplicationServer.- Caching.DataCacheException:
    ErrorCode<ERRCA0018>:SubStatus<ES0001>:The request timed out.
    at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ResponseBody respBody)
    at Microsoft.ApplicationServer.Caching.DataCache.GetNextBatch(String region, DataCacheTag[] tags, GetByTagsOperation op, IMonitoringListener listener, Byte[][]& state, Boolean& more)
    at Microsoft.ApplicationServer.Caching.CacheEnumerator.MoveNext()
    at System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext()
    at System.Linq.Enumerable.<ExceptIterator>d__99'1.MoveNext()
    at System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
    at System.Linq.Enumerable.ToList[TSource](IEnumerable'1 source)

Haben wir auch ein tracelog-Sitzung auf dem caching-server zu erfassen, weitere Informationen zur diagnose des Problems - irgendwelche Vorschläge auf, wie zu analysieren, dies würde geschätzt werden (kann ich zur Verfügung stellen, wenn es sein muss).

Wir auch überwacht verschiedene AppFabric -, CLR -, und Netzwerk-Leistungsindikatoren, unten ist ein screenshot von der Veranstaltung, wie es Auftritt:

Problembehandlung bei AppFabric-Skalierungsproblemen (Intermittent ErrorCode & lt; ERRCA0017 & gt;: SubStatus & lt; ES0006 & gt; -Fehler)

Dank im Voraus für jede Gedanken oder Beratung können Sie gemeinsam an der Lösung dieses Problems.

UPDATE 1

Im folgenden sind die vorkommenden Ausnahmen kontinuierlich auf die AppFabric Caching Server während der intermittierenden Fehler (abstrahiert von tracelogs) :

  • System.ServiceModel.CommunicationException: The socket connection was aborted because an asynchronous send to the socket did not complete within the allotted timeout of 00:00:00.0082078. The time allotted to this operation may have been a portion of a longer timeout. ---> System.ObjectDisposedException: The socket connection has been disposed. Object name: 'System.ServiceModel.Channels.SocketConnection'. --- End of inner exception stack trace --- at System.ServiceModel.Channels.SocketConnection.ThrowIfNotOpen() at System.ServiceModel.Channels.SocketConnection.BeginRead(Int32 offset, Int32 size, TimeSpan timeout, WaitCallback callback, Object state) at System.ServiceModel.Channels.SessionConnectionReader.BeginReceive(TimeSpan timeout, WaitCallback callback, Object state) at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.PerformOperation(TimeSpan timeout) at System.ServiceModel.Channels.SynchronizedMessageSource.SynchronizedAsyncResult'1..ctor(SynchronizedMessageSource syncSource, TimeSpan timeout, AsyncCallback callback, Object state) at System.ServiceModel.Channels.FramingDuplexSessionChannel.BeginReceive(TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ApplicationServer.Caching.WcfServerChannel.CompleteProcessing(IAsyncResult result)

  • System.ServiceModel.CommunicationObjectAbortedException: The communication object, System.ServiceModel.Channels.ServerSessionPreambleConnectionReader+ServerFramingDuplexSessionChannel, cannot be used for communication because it has been Aborted. at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result) at System.ServiceModel.Channels.FramingDuplexSessionChannel.OnEndSend(IAsyncResult result) at Microsoft.ApplicationServer.Caching.ReplyContext.EndSend(IAsyncResult result)

  • System.ServiceModel.CommunicationObjectFaultedException: The communication object, System.ServiceModel.Channels.ServerSessionPreambleConnectionReader+ServerFramingDuplexSessionChannel, cannot be used for communication because it is in the Faulted state. at System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() at System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout) at Microsoft.ApplicationServer.Caching.ReplyContext.Reply(Message message, TimeSpan timeout)

  • System.TimeoutException: Sending to via http://www.w3.org/2005/08/addressing/anonymous timed out after 00:00:15. The time allotted to this operation may have been a portion of a longer timeout. ---> System.TimeoutException: Cannot claim lock within the allotted timeout of 00:00:15. The time allotted to this operation may have been a portion of a longer timeout. --- End of inner exception stack trace --- at System.ServiceModel.Channels.FramingDuplexSessionChannel.OnSend(Message message, TimeSpan timeout) at System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout) at Microsoft.ApplicationServer.Caching.ReplyContext.Reply(Message message, TimeSpan timeout)

UPDATE 2

Nach einem weiteren Tag der Fehlersuche nahmen wir die folgenden Maßnahmen, die produziert einige Verbesserungen:

  1. Basierend auf diese und diese erhöhten wir maxConnectionsToServer zu 3. Als Ergebnis konnten wir 50% mehr client-Anfragen/Sek. aufgenommen von der AppFabric Caching:Cache-perf Zähler, aber der intermittierenden Fehlern nicht stoppen auftretenden

  2. Erhöhten wir die maxBufferSize und maxBufferPoolSize zu 2147483647 (int32.max) auf den Cache-Server Konfiguration. So weit sind wir in der Lage zu handhaben 300x traffic volume w/o-Fehler. Wir werden weiterhin für den Verkehr zu erhöhen Volumen und überwachen. Mehr updates Folgen

UPDATE 3

Wir noch zwei weitere hosts mit 16GB in jedem cluster und aktiviert Hochverfügbarkeits-Modus (via Secondaries=1). Derzeit ist die original-host bleibt im cluster mit 96GB ram - alle Gastgeber haben cacheSize = 12GB. Auf der cache-clients erhöhen wir die MaxConnectionToServer zu 12 (1 pro Kern). Unten sind unsere Ergebnisse:

  • Gelegentlich erhalten wir (einmal oder zweimal alle 10 Minuten):
    • ErrorCode<ERRCA0017>:SubStatus<ES0005>:There is a temporary failure. Please retry later. (There was a contention on the store.)
    • ErrorCode<ERRCA0017>:SubStatus<ES0004>:There is a temporary failure. Please retry later. (Replication queue was full. This may happen during reconfiguration of cluster hosts.)
  • Die original-96GB-cache hosts noch Erfahrungen 1 minute Ausfälle wie oben beschrieben. Die neue cache-hosts nicht erlebt haben, den Ausfall

Planen wir entfernen 80GB ram aus der ursprünglichen cache-host. Mehr updates Folgen.

UPDATE 4

Scheint das problem wurde gelöst, indem die Menge an RAM in den cache hosts zu 16GB. Wir haben nicht mehr sehen, die der intermittierenden Fehler mit der Verkehr nahm zu 400x. Scheint cased geschlossen. Nun zum nächsten Problem: Hochverfügbarkeit

InformationsquelleAutor der Frage HOCA | 2012-09-05

Schreibe einen Kommentar