Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
885 views
in Technique[技术] by (71.8m points)

asp.net - SignalR makes IIS hang after rebuild

Windows 8.1. IIS 8.5. SignalR versions:

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

Whenever I rebuild my project/solution, IIS spikes to max CPU usage and I cannot reload my page. I checked procmon.exe and it reports an enormous amount (>20 000/s) of "RegOpenKey/RegQueryKey" operations like these ones:

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:   HKLMSYSTEMCurrentControlSetServicesSignalRPerformance
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:   HKLMSystemCurrentControlSetServicesSignalRPerformance
TID:    23272
Duration:   0.0000062
Desired Access: Read

These are the steps I use to reproduce this issue:

  1. Everything works fine.
  2. I write some code and compile
  3. SignalR does a reconnect with WebSocket transport and gets this response in the response header: "HTTP/1.1 101 Switching Protocols"
  4. I do a request and IIS Worker process hangs and never comes back OR I wait t 2-3 minutes and things are working again.

I am experiencing this in IIS Express as well. Normally I resolve this by killing the IIS Worker process and reloading. Is this a permissions issue? Currently the application pool runs under my local user, but I have tried Application Pool Identity with the same results. What should be in "HKLMSystemCurrentControlSetServicesSignalRPerformance"? Currently there is no such registry key on my machine.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I have not seen this behavior before. Are the 20,000/s "RegOpenKey/RegQueryKey" operations lasting from 2-3 minutes continuously? Are all of these operations accessing the "HKLMSystemCurrentControlSetServicesSignalRPerformance" path?

SignalR is designed to stop further loading of performance counters after any performance counter fails to load.

Perhaps installing the SignalR performance counters will resolve your issue. This will create HKLMSystemCurrentControlSetServicesSignalRPerformance.

You will have to ensure that your application pool runs under a user in the "Performance Monitor Users" group.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...