웹 제한 <webLimits>
개요
요소는 <webLimits>
TCP/IP 연결 및 대역폭 제한을 지정합니다.
작업자 프로세스는 60초마다 유휴 상태인지 확인합니다. 현재 유휴 시간이 WAS(Windows Process Activation Service)에서 지정한 유휴 시간 제한 값보다 크면 작업자 프로세스가 종료를 시작합니다. dynamicIdleThreshold 특성에 0이 아닌 값을 지정하면 WAS는 사용된 RAM 양에 따라 이 유휴 시간 초과를 동적으로 줄입니다.
dynamicIdleThreshold 특성은 커밋된 실제 RAM의 양을 나타냅니다. 예를 들어 서버에 2GB의 물리적 메모리가 설치되어 있고 dynamicIdleThreshold 특성 값을 200으로 설정한 경우 사용할 실제 RAM의 200%(4GB)를 커밋했습니다. 다음 표에 따르면 4GB의 80%, 즉 실제 RAM의 160%(3.2GB)가 할당되면 WAS는 모든 작업자 프로세스의 유휴 시간 제한을 50% 줄이기 시작합니다.
다음 표에서는 dynamicIdleThreshold 값의 미리 정해진 백분율로 발생하는 유휴 시간 제한 감소를 나열합니다.
Dynamic idle threshold percentage reached |
Dynamic idle time-out reduction |
---|---|
75 이하 | WAS는 원래 유휴 시간 제한 설정을 사용합니다. |
80 | WAS는 유휴 시간 제한 시간이 구성된 모든 작업자 프로세스에 대해 원래 값의 절반으로 유휴 시간 초과를 설정합니다. |
85 | WAS는 유휴 시간 초과가 구성된 모든 작업자 프로세스에 대해 원래 값의 4분의 1로 유휴 시간 초과를 설정합니다. |
90 | WAS는 유휴 시간 초과가 구성된 모든 작업자 프로세스에 대해 원래 값의 1/8로 유휴 시간 초과를 설정합니다. |
95 | WAS는 유휴 시간 초과가 구성된 모든 작업자 프로세스에 대해 원래 값의 1/16으로 유휴 시간 초과를 설정합니다. |
100 | WAS는 유휴 시간 초과가 구성된 모든 작업자 프로세스에 대해 원래 값의 13초로 유휴 시간 초과를 설정합니다. |
동적 사이트 활성화
동적 사이트 활성화는 IIS가 웹 사이트의 활성화를 연기할 수 있도록 하여 확장성 문제를 해결하는 데 도움이 됩니다. 웹 사이트 수가 한도보다 크면 서비스가 시작될 때 IIS에서 사이트를 활성화하지 않습니다. 이전에 IIS 8.0 이하에서 수행한 것처럼 시작 시 구성된 각 사이트에 대한 큐와 바인딩을 만들지 않습니다. 대신 모든 사이트에 대한 요청을 수신 대기하고 단일 바인딩이 있는 단일 큐를 만듭니다. WAS는 사이트, 바인딩, 애플리케이션, 애플리케이션 풀 및 애플리케이션 풀 설정 목록을 로드합니다. 사이트에 대한 요청이 도착하면 IIS는 해당 목록을 사용하여 큐를 만들고 사이트에 대한 바인딩을 등록합니다. 이때 HTTP.sys 큐에 요청을 배치하고 WAS는 작업자 프로세스를 시작하고 요청이 처리됩니다.
동적 사이트 활성화를 사용하면 IIS 서비스가 더 빠르게 시작되고 메모리가 더 적게 소비될 수 있습니다. 또한 IIS는 HTTP를 사용하여 등록된 큐 및 바인딩을 모두 해제할 필요가 없으므로 다시 시작하는 데 시간이 훨씬 적게 소요됩니다. 이 컨텍스트에서 활성화는 IIS가 HTTP 프로토콜 스택(HTTP.sys)에 사이트를 등록하는 프로세스를 나타냅니다. 이 활성화는 사이트에 대한 요청이 수신될 때만 발생하는 작업자 프로세스를 만드는 것과 동일하지 않습니다.
서버에서 처리하는 사이트 수가 미리 설정된 제한보다 큰 경우 동적 사이트 활성화를 사용할 수 있습니다. 기본적으로 해당 제한은 100입니다. 해당 값을 변경하지 않으면 사이트가 100개 이상의 사이트를 호스트하는 서버에서 동적으로 활성화됩니다. 반면에 100개 이하의 사이트의 경우 시작 시 모든 사이트가 활성화됩니다. dynamicRegistrationThreshold 특성을 변경하여 해당 제한을 변경할 수 있습니다. 사이트 수가 적은 서버의 성능 향상은 훨씬 더 많은 사이트보다 작습니다.
참고
동적 사이트 활성화를 사용하도록 설정하면 사용자는 IP 주소를 사용하여 웹 요청을 보낼 수 없습니다. 예를 들어 사용자가 로 이동 HTTP://127.0.0.1하려고 하면 400 잘못된 요청 오류가 표시됩니다.
호환성
버전 | 참고 |
---|---|
IIS 10.0 | <webLimits> 요소가 IIS 10.0에서 수정되지 않았습니다. |
IIS 8.5 | 특성이 dynamicRegistrationThreshold IIS 8.5에 추가되었습니다. |
IIS 8.0 | <webLimits> 요소가 IIS 8.0에서 수정되지 않았습니다. |
IIS 7.5 | <webLimits> 요소가 IIS 7.5에서 수정되지 않았습니다. |
IIS 7.0 | 요소는 <webLimits> IIS 7.0에서 도입되었습니다. |
IIS 6.0 | 요소는 <webLimits> 다음 IIS 6.0 메타베이스 설정을 대체합니다.
|
설치 프로그램
요소는 <webLimits>
IIS 7 이상의 기본 설치에 포함됩니다.
방법
동적 사이트 활성화의 하한을 구성하는 방법
IIS(인터넷 정보 서비스) 관리자를 엽니다.
Windows Server 2012 R2를 사용하는 경우:
- 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
Windows 8.1 사용하는 경우:
- Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
- 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 서버를 선택한 다음 관리 영역에서 구성 편집기를 두 번 클릭합니다.
구성 편집기에서 섹션에 대해 를 확장
system.applicationHost
한 다음 webLimits를 선택합니다.dynamicRegistrationThreshold 값을 입력합니다.
작업 창에서 적용을 클릭합니다.
구성
특성
attribute | Description |
---|---|
connectionTimeout |
선택적 timeSpan 특성입니다. 비활성으로 간주되는 연결의 연결을 끊기 전에 IIS가 대기하는 시간을 지정합니다. 기본값은 00:02:00 입니다. |
demandStartThreshold |
선택적 uint 특성입니다. 웹 서버에서 동시에 실행할 수 있는 최대 작업자 프로세스 수를 지정합니다. 너무 많은 작업자 프로세스가 시작될 때 IIS 서버가 응답하지 않도록 하려면 이 속성을 사용할 수 있습니다. 기본값은 2147483647 입니다. |
dynamicIdleThreshold |
선택적 uint 특성입니다. 커밋된 실제 RAM의 백분율을 지정합니다. 유효한 정수 범위는 0에서 10000까지입니다. WAS는 이 임계값을 사용하여 작업자 프로세스의 유휴 시간 초과를 동적으로 단축합니다. 자세한 내용은 주의 섹션을 참조하세요. 기본값은 0 입니다. |
dynamicRegistrationThreshold |
선택적 uint 특성입니다. 동적 사이트 활성화의 하한을 지정합니다. 서버에서 구성된 웹 사이트 수가 이 특성의 값을 초과하면 서비스가 시작될 때 서비스가 모든 사이트를 활성화하지 않습니다. 대신 IIS는 사이트에 대한 첫 번째 요청을 받으면 각 사이트를 활성화합니다. 구성된 사이트 수가 이 수보다 작거나 같으면 서비스가 시작될 때 구성된 모든 웹 사이트가 활성화됩니다. 특히 많은 수의 사이트에 자주 액세스하지 않는 경우 사이트를 개별적으로 정품 인증할 때 IIS에 필요한 시스템 리소스의 양이 줄어듭니다. 사이트에 대한 첫 번째 요청은 사이트가 활성화될 때 더 많은 시간이 걸릴 수 있지만 후속 액세스는 정상적으로 응답합니다. 기본값은 100 입니다. |
headerWaitTimeout |
선택적 timeSpan 특성입니다. 서버가 클라이언트 연결을 끊기 전에 요청이 수신될 때까지 모든 HTTP 헤더를 기다리는 시간을 지정합니다. 이 특성의 목적은 연결 제한을 최대화하고 연결 상태를 유지하려는 DoS(서비스 거부) 공격의 일반적인 변형을 방지하는 데 도움이 됩니다. 기본값은 00:00:00 입니다. |
maxGlobalBandWidth |
선택적 uint 특성입니다. 서버의 최대 총 대역폭을 지정합니다. 값을 0으로 설정하면 서버의 대역폭이 무제한으로 설정됩니다. 기본값은 4294967295 입니다. |
minBytesPerSecond |
선택적 uint 특성입니다. 클라이언트에 응답을 보낼 때 HTTP.sys 적용하는 최소 처리량 속도(바이트)를 지정합니다. minBytesPerSecond 특성은 최소한의 데이터로 연결을 열어 악의적이거나 오작동하는 소프트웨어 클라이언트가 리소스를 사용하지 못하도록 방지합니다. 처리량 속도가 minBytesPerSecond 설정보다 낮으면 연결이 종료됩니다. 현재 구현은 전체 응답을 연결 클라이언트로 다시 스트리밍하는 데 걸린 시간 후에만 최소 대역폭 전송 속도가 경과한 후에만 연결을 종료합니다. 전송 속도가 최소 기간 동안만 minBytesPerSecond 에 지정된 값보다 낮지만 전체 전송 속도가 높으면 연결이 종료되지 않습니다. 기본값은 240 입니다. |
자식 요소
없음
구성 샘플
다음 구성 샘플에서는 연결 제한 시간을 1분으로 설정하고, 커밋된 실제 RAM의 백분율을 150으로 설정하고, 헤더 대기 시간 제한 시간을 30초로 설정하고, 허용되는 최소 처리량 속도를 초당 500바이트로 설정합니다.
<configuration>
<system.applicationHost>
<webLimits connectionTimeout="00:01:00"
dynamicIdleThreshold="150"
headerWaitTimeout="00:00:30"
minBytesPerSecond="500"
/>
</system.applicationHost>
</configuration>
샘플 코드
다음 코드 샘플은 연결 제한 시간을 1분으로 설정하고, 커밋된 실제 RAM의 백분율을 150으로 설정하고, 헤더 대기 시간 제한 시간을 30초로 설정하고, 허용되는 최소 처리량 속도를 초당 500바이트로 설정합니다.
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/webLimits /connectionTimeout:"00:01:00" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /dynamicIdleThreshold:"150" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /headerWaitTimeout:"00:00:30" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /minBytesPerSecond:"500" /commit:apphost
참고
AppCmd.exe 사용하여 이러한 설정을 구성할 때 커밋 매개 변수 apphost
를 로 설정해야 합니다. 그러면 구성 설정이 ApplicationHost.config 파일의 적절한 위치 섹션에 커밋됩니다.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection webLimitsSection = config.GetSection("system.applicationHost/webLimits");
webLimitsSection["connectionTimeout"] = TimeSpan.Parse("00:01:00");
webLimitsSection["dynamicIdleThreshold"] = 150;
webLimitsSection["headerWaitTimeout"] = TimeSpan.Parse("00:00:30");
webLimitsSection["minBytesPerSecond"] = 500;
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim webLimitsSection As ConfigurationSection = config.GetSection("system.applicationHost/webLimits")
webLimitsSection("connectionTimeout") = TimeSpan.Parse("00:01:00")
webLimitsSection("dynamicIdleThreshold") = 150
webLimitsSection("headerWaitTimeout") = TimeSpan.Parse("00:00:30")
webLimitsSection("minBytesPerSecond") = 500
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var webLimitsSection = adminManager.GetAdminSection("system.applicationHost/webLimits", "MACHINE/WEBROOT/APPHOST");
webLimitsSection.Properties.Item("connectionTimeout").Value = "00:01:00";
webLimitsSection.Properties.Item("dynamicIdleThreshold").Value = 150;
webLimitsSection.Properties.Item("headerWaitTimeout").Value = "00:00:30";
webLimitsSection.Properties.Item("minBytesPerSecond").Value = 500;
adminManager.CommitChanges();
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set webLimitsSection = adminManager.GetAdminSection("system.applicationHost/webLimits", "MACHINE/WEBROOT/APPHOST")
webLimitsSection.Properties.Item("connectionTimeout").Value = "00:01:00"
webLimitsSection.Properties.Item("dynamicIdleThreshold").Value = 150
webLimitsSection.Properties.Item("headerWaitTimeout").Value = "00:00:30"
webLimitsSection.Properties.Item("minBytesPerSecond").Value = 500
adminManager.CommitChanges()