2014-11-19 14 views
6

Windows 8.1. IIS 8.5. versioni SignalR:SignalR fa bloccare IIS dopo la ricostruzione

<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" /> 

Ogni volta che ricostruire il mio progetto/soluzione, IIS picchi di utilizzo massimo della CPU e non posso ricaricare la mia pagina. Ho controllato procmon.exe e riporta una quantità enorme (> 20 000/s) delle operazioni "RegOpenKey/RegQueryKey" come questi:

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 

Questi sono i passi che uso per riprodurre questo problema:

  1. Tutto funziona correttamente.
  2. ho scrivere del codice e compilare
  3. SignalR fa una riconnessione con il trasporto WebSocket e ottiene questa risposta nell'intestazione di risposta: "HTTP/1.1 101 Protocolli di commutazione"
  4. faccio una richiesta e di lavoro IIS si blocca di processo e mai torna indietro O aspetto 2-3 minuti e le cose stanno funzionando di nuovo.

Lo sto sperimentando anche in IIS Express. Normalmente risolvo questo uccidendo il processo di IIS Worker e ricaricando. Si tratta di un problema di autorizzazioni? Attualmente il pool di applicazioni viene eseguito con il mio utente locale, ma ho provato Application Pool Identity con gli stessi risultati. Cosa dovrebbe essere in "HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance"? Attualmente non esiste una chiave di registro del genere sul mio computer.

risposta

4

Non ho visto questo comportamento prima. Le operazioni "RegOpenKey/RegQueryKey" da 20.000/s durano continuamente da 2-3 minuti? Tutte queste operazioni accedono al percorso "HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance"?

SignalR è progettato per interrompere ulteriormente il caricamento dei contatori delle prestazioni dopo il mancato caricamento di un contatore di prestazioni.

Forse installing the SignalR performance counters risolverà il problema. Ciò creerà HKLM \ System \ CurrentControlSet \ Services \ SignalR \ Performance.

È necessario assicurarsi che il pool di applicazioni venga eseguito da un utente nel gruppo "Utenti di Performance Monitor".

+0

Le richieste sono continue per il tempo in cui si blocca, sì. Ho registrato ~ 13 000 in 0,3 secondi - tutti dello stesso tipo di quelli menzionati sopra. L'installazione del contatore delle prestazioni ha aiutato, quindi grazie mille per quello! – perkrihe

2

Buone notizie! Sembra che questo problema sia stato sollevato ufficialmente e che sia stata applicata una correzione. Volevo solo condividere questo se qualcuno ha lo stesso problema.

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

A quanto pare, problema è stato causato da un CultureInfo che perdeva da un diverso AppDomain. Accade nel costruttore della classe PerformanceCounter nello spazio dei nomi System.Diagnostics.

Vedi un'analisi dettagliata qui: http://www.zpqrtbnk.net/posts/appdomains-threads-cultureinfos-and-paracetamol

Al momento della stesura di un nuovo pacchetto non è ancora uscito, ma presto correzione deve diventare disponibili attraverso ufficiali dei mangimi NuGet. La correzione è contenuta nel pacchetto Microsoft.AspNet.SignalR.Core.

Problemi correlati