[SignalR 2.0] SignalR 성능 튜닝하기

728x90
반응형

들어가며

처음으로 SignalR 을 이용해서 채팅 서버를 구현한 것이라, 이를 위해 성능을 검증해야 하는 상황이 생겼습니다.

어찌보면 당연한 프로세스 였는데요. 저희가 진행한 성능검증은, 1대의 IIS 서버에 어느정도의 Request를 감당할 수 있는지, 최대 동접인원을 기준으로 한대의 서버에 몇명의 유저를 감당할 수 있는지 등등 이였습니다.

진행하는 과정에서 SignalR의 성능 튜닝을 아래와 같이 진행하였습니다. 

 

※ SignalR 2.x 버전의 IIS 환경임을 참고해주세요.

 

 

 

IIS 구성 수정

SignalR의 성능 튜닝을 위해서는, 어플리케이션당 최대 동시 요청자 수를 늘립니다. 

 

 

IIS 관리자에서 SignalR로 설정되어 있는 사이트 선택시, 하단부에 구성편집기 메뉴를 선택하면, 아래와 같은 화면이 보여집니다. 

 

 

해당 메뉴에서 구성편집기의 system.webServer/serverRuntime 섹션의 appConcurrentRequestLimit 수를 기본값 5000 에서 20,000 으로 수정하였습니다.

 

 

 

 

 

ASP.NET Configuration 의 CPU당 최대 동시요청 수정

기본적으로  ASP.NET 4.0 의 최대 동시 연결 수는 CPU당 5000 으로 설정되어 있습니다. 더 많은 동시 연결이 필요할 경우 설정값을 늘려야 합니다. 

해당되는 키 이름은 maxConcurrentRequestPerCPU 이며, 

 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet.config

 

파일을 수정하면 됩니다. 

참고로 각 설치 환경 (32비트, 64비트) 따라 폴더위치는 다릅니다.

 

 

 

Aspnet.config

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <runtime>
        <legacyUnhandledExceptionPolicy enabled="false" />
        <legacyImpersonationPolicy enabled="true"/>
        <alwaysFlowImpersonationPolicy enabled="false"/>
        <SymbolReadingPolicy enabled="1" />
        <shadowCopyVerifyByTimestamp enabled="true"/>
    </runtime>
    <startup useLegacyV2RuntimeActivationPolicy="true" />
</configuration>


<!-- 위 내용을 아래와 같이 수정합니다. -->


<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <runtime>
        <legacyUnhandledExceptionPolicy enabled="false" />
        <legacyImpersonationPolicy enabled="true"/>
        <alwaysFlowImpersonationPolicy enabled="false"/>
        <SymbolReadingPolicy enabled="1" />
        <shadowCopyVerifyByTimestamp enabled="true"/>
    </runtime>
    <startup useLegacyV2RuntimeActivationPolicy="true" />
    
    <!--추가내용-->
    <system.web>
        <applicationPool maxConcurrentRequestsPerCPU="20000" />
    </system.web>
    
</configuration>

 

 

 

 

 

ASP.NET Configuration 의 요청 대기열 제한 수정

총 연결 량이 maxConcurrentRequestsPerCPU 설정을 초과하면, ASP.NET 은 대기열을 사용하여 요청을 조절합니다. 대기열 크기를 제어하려면, 아래의 설정을 변경해 줍니다. 

 

(총 연결량은 maxConcurrentRequestsPerCPU * 논리 프로세스 수)

 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

 

파일의 processModel 의 속성을 변경합니다. 

 

 

 

 

machine.config

<system.web>
        <processModel autoConfig="true"/>

        <httpHandlers/>
        
        
<!-- 위 내용을 아래와 같이 수정 -->

        
<system.web>
        <processModel autoConfig="false" requestQueueLimit="250000" />

        <httpHandlers/>

 

 

 

 

 

위와같이 SignalR의 성능 튜닝을 진행하였으며, 자세한 성능카운트 설정 관련해선 참조링크를 참조해주세요.

 

 

 

 

 

 

참고

https://github.com/SignalR/SignalR/wiki/Performance

 

 

 

 

 

 

 

 

END


 

 

 

 

728x90