2014-11-19 15 views
6

Windows 8.1. IIS 8.5. SignalR Versionen:SignalR lässt IIS nach dem Wiederaufbau hängen

<package id="Microsoft.AspNet.SignalR" version="2.1.2" targetFramework="net451" /> 
<package id="Microsoft.AspNet.SignalR.Core" version="2.1.2" targetFramework="net451" /> 
<package id="Microsoft.AspNet.SignalR.JS" version="2.1.2" targetFramework="net451" /> 
<package id="Microsoft.AspNet.SignalR.SystemWeb" version="2.1.2" targetFramework="net451" /> 

Jedes Mal, wenn ich mein Projekt/Lösung neu zu erstellen, IIS Spitzen max CPU-Auslastung und ich kann meine Seite nicht neu laden. Ich habe procmon.exe und meldet es eine enorme Menge (> 20 000/s) von „RegOpenKey/RegQueryKey“ Operationen wie diese hier:

Date & Time: 19.11.2014 10:47:20 
Event Class: Registry 
Operation: RegQueryKey 
Result: SUCCESS 
Path: HKLM 
TID: 23272 
Duration: 0.0000059 
Query: HandleTags 
HandleTags: 0x0 

Date & Time: 19.11.2014 10:47:20 
Event Class: Registry 
Operation: RegOpenKey 
Result: REPARSE 
Path: HKLM\SYSTEM\CurrentControlSet\Services\SignalR\Performance 
TID: 23272 
Duration: 0.0000121 
Desired Access: Read 


Date & Time: 19.11.2014 10:47:20 
Event Class: Registry 
Operation: RegOpenKey 
Result: NAME NOT FOUND 
Path: HKLM\System\CurrentControlSet\Services\SignalR\Performance 
TID: 23272 
Duration: 0.0000062 
Desired Access: Read 

Dies sind die Schritte, die ich dieses Problem zu reproduzieren, verwenden:

  1. Alles funktioniert gut.
  2. Ich schreibe einige Code und kompilieren
  3. SignalR macht einen Reconnect mit WebSocket Transport und bekommt diese Antwort in der Antwort-Header: "HTTP/1.1 101 Switching Protocols"
  4. ich eine Anfrage und IIS Worker tun hängt Prozess und nie kommt zurück ODER ich warte 2-3 Minuten und die Dinge funktionieren wieder.

Ich erfahre das auch in IIS Express. Normalerweise behebe ich dies, indem ich den IIS-Arbeitsprozess abbringe und neu lade. Ist das ein Berechtigungsproblem? Derzeit läuft der Anwendungspool unter meinem lokalen Benutzer, aber ich habe die Identität des Anwendungspools mit den gleichen Ergebnissen versucht. Was sollte in "HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance" sein? Momentan gibt es keinen solchen Registrierungsschlüssel auf meinem Computer.

Antwort

4

Ich habe dieses Verhalten vorher nicht gesehen. Arbeiten die 20.000/s "RegOpenKey/RegQueryKey" -Operationen kontinuierlich von 2-3 Minuten? Greifen alle diese Vorgänge auf den Pfad "HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance" zu?

SignalR verhindert das weitere Laden von Leistungsindikatoren, nachdem ein Leistungsindikator nicht geladen werden konnte.

Vielleicht installing the SignalR performance counters wird Ihr Problem lösen. Dadurch wird HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance erstellt.

Sie müssen sicherstellen, dass Ihr Anwendungspool unter einem Benutzer in der Gruppe "Systemmonitorbenutzer" ausgeführt wird.

+0

Die Anfragen sind kontinuierlich für die Zeit, die es hängt, ja. Ich habe ~ 13 000 in 0,3 Sekunden aufgenommen - alles vom selben Typ wie oben erwähnt. Die Installation des Leistungsindikators hat geholfen, also vielen Dank dafür! – perkrihe

2

Gute Nachrichten! Es scheint, dass dieses Problem offiziell ausgelöst wird und ein Fix angewendet wird. Wollte nur teilen, wenn jemand das gleiche Problem hat.

https://github.com/SignalR/SignalR/issues/3414

Offenbar war Problem durch ein CultureInfo verursacht, die von einem anderen AppDomain durchgesickert. Es passiert in PerformanceCounter Klassenkonstruktor in System.Diagnostics Namensraum.

Sehen Sie hier eine detaillierte Analyse: http://www.zpqrtbnk.net/posts/appdomains-threads-cultureinfos-and-paracetamol

Zu der Zeit ein neues Paket des Schreibens noch nicht erschienen ist, aber bald beheben sollte durch offizielle NuGet Feed verfügbar sind. Fix ist in Microsoft.AspNet.SignalR.Core Paket enthalten.

Verwandte Themen