다음을 통해 공유


애플리케이션 풀 <재활용에 대한 재활용 설정>

개요

<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의 기본 설치에 포함됩니다.

방법

애플리케이션 풀에 대해 주기적인 재활용을 설정하는 방법

  1. 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(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장한 다음 애플리케이션 풀을 클릭합니다.

  3. 애플리케이션 풀 창에서 편집할 애플리케이션 풀을 선택합니다.

  4. 작업 창에서 재활용...을 클릭합니다.
    I S 관리자를 보여 주는 스크린샷 재활용은 작업 창에 나열됩니다.

  5. 애플리케이션 풀 재활용 설정 편집 마법사의 재활용 조건 페이지에서 고정 간격 섹션의 옵션 중 하나 이상을 선택하고 적절한 텍스트 상자에 값을 입력한 후 다음을 클릭합니다.
    애플리케이션 풀 재활용 설정 편집 대화 상자의 재활용 조건 페이지를 보여 주는 스크린샷 특정 시간이 선택되고 텍스트 상자에 3M이 입력됩니다.

  6. (선택 사항) 애플리케이션 풀 재활용 설정 편집 마법사의 로그로 이벤트 재활용 페이지에서 IIS가 이벤트 로그에 보낼 구성 가능한 재활용 이벤트 및 런타임 재활용 이벤트를 선택한 다음 마침을 클릭합니다.
    로그할 이벤트 재활용 페이지를 보여 주는 스크린샷. 예약된 시간이 선택됩니다.

구성

요소는 <recycling> ApplicationHost.config 파일의 서버 수준에서 구성할 수 있습니다.

특성

attribute Description
disallowOverlappingRotation 선택적 부울 특성입니다.

해당 프로세스가 종료되는 동안 WWW 서비스가 기존 작업자 프로세스를 대체하기 위해 다른 작업자 프로세스를 시작해야 하는지 여부를 지정합니다. 작업자 프로세스가 여러 작업자 프로세스를 지원하지 않는 애플리케이션 코드를 로드하는 경우 이 속성의 값을 true 로 설정해야 합니다.

기본값은 false입니다.
disallowRotationOnConfigChange 선택적 부울 특성입니다.

구성이 변경된 경우 WWW 서비스가 애플리케이션 풀에서 작업자 프로세스를 회전해야 하는지 여부를 지정합니다.

기본값은 false입니다.
logEventOnRecycle 선택적 flags 특성입니다.

애플리케이션 풀이 재활용될 때 IIS에서 이벤트를 기록해야 되도록 지정합니다. IIS가 이벤트를 기록하는 경우 logEventOnRecycle 속성에는 재활용 이유에 해당하는 비트 집합이 있어야 합니다.

logEventOnRecycle 특성에는 다음 값 중 하나 이상이 있을 수 있습니다. 둘 이상의 값을 지정하는 경우 쉼표(,)로 구분합니다. IIS 10 이전 버전의 IIS에 대한 기본 플래그는 , 및 이며, IIS 10 이상에서는 , , ScheduleOnDemandIsapiUnhealthyConfigChangeRequestsMemoryPrivateMemory입니다.TimeTimePrivateMemoryMemory
Description
ConfigChange 구성 변경으로 인해 애플리케이션 풀이 재활용되는 경우 이벤트를 기록합니다.

숫자 값은 입니다 64.
IsapiUnhealthy ISAPI 확장이 작업자 프로세스에 비정상 상태임을 보고한 후 애플리케이션 풀이 재활용되는 경우 이벤트를 기록합니다.
숫자 값은 입니다 16.
Memory 애플리케이션 풀이 지정된 양의 가상 메모리를 사용한 후 재활용할 때 이벤트를 기록합니다.

숫자 값은 입니다 8.
OnDemand 애플리케이션 풀을 즉시 재활용하여 문제를 해결할 때 이벤트를 기록합니다.

숫자 값은 입니다 32.
PrivateMemory 애플리케이션 풀이 지정된 양의 가상 메모리를 사용한 후 재활용할 때 이벤트를 기록합니다.

숫자 값은 입니다 128.
Requests 구성된 요청 수에 도달한 후 애플리케이션 풀이 재활용되는 경우 이벤트를 기록합니다.

숫자 값은 입니다 2.
Schedule 구성된 시간에 도달한 후 애플리케이션 풀이 재활용되면 이벤트를 기록합니다.

숫자 값은 입니다 4.
Time 구성된 시간 후에 애플리케이션 풀이 재활용되는 경우 이벤트를 기록합니다.

숫자 값은 입니다 1.

자식 요소

요소 Description
periodicRestart 선택적 요소입니다.

애플리케이션 풀이 재활용되는 조건을 지정합니다.

구성 샘플

다음 구성 샘플에서는 애플리케이션 풀 <add> 요소를 사용하여 Contoso라는 새 애플리케이션 풀을 만듭니다. 요소는 <recycling> 애플리케이션 풀 다시 시작에 대한 로깅을 구성하고, <periodicRestart> 요소는 애플리케이션 풀이 다시 시작될 때 구성하고 <processModel> , 요소는 각각 30초 동안 애플리케이션 풀에서 작업자 프로세스를 종료하고 시작하기 위한 shutdownTimeLimitstartupTimeLimit 특성을 구성합니다. 이러한 시간 제한을 초과하면 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()