애플리케이션 풀 <재활용에 대한 재활용 설정>
개요
<recycling>
요소에는 IIS 7을 트리거하여 애플리케이션 풀을 다시 시작하는 조건을 제어하는 구성 설정이 포함되어 있습니다. 애플리케이션 풀이 재활용되는 경우 IIS가 이벤트 로그에 쓰는 이벤트 유형을 제어할 수도 있습니다.
IIS가 설정된 간격(예: 180분마다), 매일 특정 시간에 또는 애플리케이션 풀이 특정 수의 요청을 수신한 후에 애플리케이션 풀을 재활용하도록 지정할 수 있습니다. 작업자가 <recycling>
가상 메모리를 처리하고 실제 메모리 사용량이 특정 임계값에 도달하면 애플리케이션 풀을 다시 시작하도록 요소를 구성할 수도 있습니다.
요소를 사용하여 IIS가 <recycling>
애플리케이션 풀을 재활용할 때 이벤트 로그에 기록할 이벤트의 두 클래스를 지정할 수 있습니다. 첫 번째 클래스에는 이전 단락에 언급된 것과 같이 구성할 수 있는 재활용 이벤트가 포함됩니다. 두 번째 클래스에는 주문형 재활용 이벤트, 애플리케이션 풀에서 실행되는 애플리케이션 또는 애플리케이션의 구성 변경으로 인해 트리거되는 이벤트 재활용 또는 비정상 ISAPI(Internet Server Application Programming Interface) 필터 또는 ISAPI 확장으로 인한 재활용과 같은 런타임 재활용 이벤트가 포함됩니다.
요소는 <recycling>
다음 특성 및 자식 요소를 사용하여 이러한 기능을 구현합니다.
- logEventOnRecycle 특성
- periodicRestart 요소
호환성
버전 | 참고 |
---|---|
IIS 10.0 | 특성의 logEventOnRecycle 기본값은 IIS 10.0에서 수정되었습니다. |
IIS 8.5 | <recycling> 요소가 IIS 8.5에서 수정되지 않았습니다. |
IIS 8.0 | <recycling> 요소가 IIS 8.0에서 수정되지 않았습니다. |
IIS 7.5 | <recycling> 요소가 IIS 7.5에서 수정되지 않았습니다. |
IIS 7.0 | 요소는 <recycling> IIS 7.0에서 도입되었습니다. |
IIS 6.0 | 요소는 <recycling> IIS 6.0 IIsApplicationPools 메타베이스 속성의 일부를 대체합니다. |
설치 프로그램
컬렉션은 <applicationPools>
IIS 7의 기본 설치에 포함됩니다.
방법
애플리케이션 풀에 대해 주기적인 재활용을 설정하는 방법
IIS(인터넷 정보 서비스) 관리자를 엽니다.
Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:
- 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
Windows 8 또는 Windows 8.1 사용하는 경우:
- Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
- 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:
- 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
Windows Vista 또는 Windows 7을 사용하는 경우:
- 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
- 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 서버 이름을 확장한 다음 애플리케이션 풀을 클릭합니다.
애플리케이션 풀 창에서 편집할 애플리케이션 풀을 선택합니다.
애플리케이션 풀 재활용 설정 편집 마법사의 재활용 조건 페이지에서 고정 간격 섹션의 옵션 중 하나 이상을 선택하고 적절한 텍스트 상자에 값을 입력한 후 다음을 클릭합니다.
(선택 사항) 애플리케이션 풀 재활용 설정 편집 마법사의 로그로 이벤트 재활용 페이지에서 IIS가 이벤트 로그에 보낼 구성 가능한 재활용 이벤트 및 런타임 재활용 이벤트를 선택한 다음 마침을 클릭합니다.
구성
요소는 <recycling>
ApplicationHost.config 파일의 서버 수준에서 구성할 수 있습니다.
특성
attribute | Description | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
disallowOverlappingRotation |
선택적 부울 특성입니다. 해당 프로세스가 종료되는 동안 WWW 서비스가 기존 작업자 프로세스를 대체하기 위해 다른 작업자 프로세스를 시작해야 하는지 여부를 지정합니다. 작업자 프로세스가 여러 작업자 프로세스를 지원하지 않는 애플리케이션 코드를 로드하는 경우 이 속성의 값을 true 로 설정해야 합니다. 기본값은 false 입니다. |
||||||||||||||||||
disallowRotationOnConfigChange |
선택적 부울 특성입니다. 구성이 변경된 경우 WWW 서비스가 애플리케이션 풀에서 작업자 프로세스를 회전해야 하는지 여부를 지정합니다. 기본값은 false 입니다. |
||||||||||||||||||
logEventOnRecycle |
선택적 flags 특성입니다. 애플리케이션 풀이 재활용될 때 IIS에서 이벤트를 기록해야 되도록 지정합니다. IIS가 이벤트를 기록하는 경우 logEventOnRecycle 속성에는 재활용 이유에 해당하는 비트 집합이 있어야 합니다. logEventOnRecycle 특성에는 다음 값 중 하나 이상이 있을 수 있습니다. 둘 이상의 값을 지정하는 경우 쉼표(,)로 구분합니다. IIS 10 이전 버전의 IIS에 대한 기본 플래그는 , 및 이며, IIS 10 이상에서는 , , Schedule OnDemand IsapiUnhealthy ConfigChange Requests Memory 및 PrivateMemory 입니다.Time Time PrivateMemory Memory
|
자식 요소
요소 | Description |
---|---|
periodicRestart |
선택적 요소입니다. 애플리케이션 풀이 재활용되는 조건을 지정합니다. |
구성 샘플
다음 구성 샘플에서는 애플리케이션 풀 <add>
요소를 사용하여 Contoso라는 새 애플리케이션 풀을 만듭니다. 요소는 <recycling>
애플리케이션 풀 다시 시작에 대한 로깅을 구성하고, <periodicRestart>
요소는 애플리케이션 풀이 다시 시작될 때 구성하고 <processModel>
, 요소는 각각 30초 동안 애플리케이션 풀에서 작업자 프로세스를 종료하고 시작하기 위한 shutdownTimeLimit 및 startupTimeLimit 특성을 구성합니다. 이러한 시간 제한을 초과하면 IIS는 작업자 프로세스를 종료합니다.
<add name="Contoso">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
샘플 코드
다음 코드 예제에서는 CONtoso라는 애플리케이션 풀을 IIS 7 서버에 추가한 다음, 애플리케이션 풀을 매일 오전 3:00에 재활용하도록 설정합니다.
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /commit:apphost
다음 구문을 사용할 수도 있습니다.
appcmd.exe add apppool /name:"Contoso"
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /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 applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
addElement["name"] = @"Contoso";
ConfigurationElement recyclingElement = addElement.GetChildElement("recycling");
ConfigurationElement periodicRestartElement = recyclingElement.GetChildElement("periodicRestart");
ConfigurationElementCollection scheduleCollection = periodicRestartElement.GetCollection("schedule");
ConfigurationElement addElement1 = scheduleCollection.CreateElement("add");
addElement1["value"] = TimeSpan.Parse("03:00:00");
scheduleCollection.Add(addElement1);
applicationPoolsCollection.Add(addElement);
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 applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
addElement("name") = "Contoso"
Dim recyclingElement As ConfigurationElement = addElement.GetChildElement("recycling")
Dim periodicRestartElement As ConfigurationElement = recyclingElement.GetChildElement("periodicRestart")
Dim scheduleCollection As ConfigurationElementCollection = periodicRestartElement.GetCollection("schedule")
Dim addElement1 As ConfigurationElement = scheduleCollection.CreateElement("add")
addElement1("value") = TimeSpan.Parse("03:00:00")
scheduleCollection.Add(addElement1)
applicationPoolsCollection.Add(addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
var recyclingElement = addElement.ChildElements.Item("recycling");
var periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart");
var scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection;
var addElement1 = scheduleCollection.CreateNewElement("add");
addElement1.Properties.Item("value").Value = "03:00:00";
scheduleCollection.AddElement(addElement1);
applicationPoolsCollection.AddElement(addElement);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
Set recyclingElement = addElement.ChildElements.Item("recycling")
Set periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart")
Set scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection
Set addElement1 = scheduleCollection.CreateNewElement("add")
addElement1.Properties.Item("value").Value = "03:00:00"
scheduleCollection.AddElement(addElement1)
applicationPoolsCollection.AddElement(addElement)
adminManager.CommitChanges()