Pule aplikacji i proces roboczy
Pule aplikacji są jednym z najważniejszych mechanizmów izolacji i stabilności w usługach IIS. Każda pula aplikacji uruchamia co najmniej jeden proces roboczy (w3wp.exe), który obsługuje żądania dla aplikacji przypisanych do tej puli. Jeśli jedna pula ulegnie awarii lub zostanie ponownie użyta, inne pule będą działać bez zakłóceń.
Gdy usługi IIS odbierają żądanie, kieruje je do procesu roboczego należącego do puli aplikacji przypisanej do aplikacji docelowej. Ponieważ każda pula działa we własnej przestrzeni procesów
- Awaria lub przeciek pamięci w jednej puli nie ma wpływu na inne pule.
- Każda pula może działać w ramach innej tożsamości systemu Windows, umożliwiając korzystanie z kont usługowych o najniższych uprawnieniach.
- Każda pula może być skierowana do innej wersji środowiska .NET CLR lub trybu potoku.
Tip
Przypisz dedykowaną pulę aplikacji do każdej witryny internetowej lub aplikacji w środowisku produkcyjnym. Nigdy nie udostępniaj pul aplikacji między lokacjami z różnymi wymaganiami dotyczącymi zabezpieczeń lub stabilności.
Tworzenie puli aplikacji
Aby utworzyć pulę aplikacji przy użyciu Menedżera usług IIS, wykonaj następujące kroki:
- W panelu Połączenia wybierz Pule aplikacji.
- W okienku Akcje po prawej stronie wybierz pozycję Dodaj pulę aplikacji.
- W oknie dialogowym Dodawanie puli aplikacji skonfiguruj następujące ustawienia:
- Nazwa: wprowadź opisową nazwę, na przykład Contoso-AppPool.
- Wersja środowiska .NET CLR: wybierz wersję 4.0 dla aplikacji .NET Framework lub Brak kodu zarządzanego dla aplikacji non-.NET.
- Tryb zarządzanego potoku: wybierz pozycję Zintegrowane.
- Wybierz przycisk OK.
Aby edytować istniejącą pulę, kliknij ją dwukrotnie lub wybierz ją i wybierz pozycję Ustawienia podstawowe w okienku Akcje.
Nową pulę aplikacji można utworzyć przy użyciu New-WebAppPool polecenia cmdlet programu PowerShell. Aby na przykład utworzyć nową pulę aplikacji o nazwie Contoso-AppPool, uruchom następujące polecenie:
# Create a new application pool
New-WebAppPool -Name "Contoso-AppPool"
# Set .NET CLR version (use "" for No Managed Code)
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" managedRuntimeVersion "v4.0"
# Set pipeline mode (0 = Integrated, 1 = Classic)
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" managedPipelineMode 0
Konfigurowanie recyklingu puli aplikacji
Odtwarzanie zastępuje proces roboczy w zdefiniowanych odstępach czasu lub progach, co pomaga odzyskać pamięć i zasoby, które mogą się gromadzić w czasie. Usługi IIS uruchamiają nowy proces roboczy przed zamknięciem starego, co prowadzi do nakładającego się recyklingu, dlatego recykling zazwyczaj przebiega bez zauważenia przez użytkowników.
Aby skonfigurować recykling puli aplikacji w Menedżerze IIS, wykonaj następujące kroki:
- Wybierz pulę aplikacji na liście Pule aplikacji.
- W okienku Akcje wybierz pozycję Odtwarzanie.
- W kreatorze edytowania ustawień recyklingu puli aplikacji skonfiguruj:
- Regularne interwały czasowe: ustaw interwał w minutach. Wartość domyślna to 1740 minut (29 godzin). Rozważ dostosowanie tego do godzin poza godzinami szczytu lub wyłączenie recyklingu opartego na czasie i poleganie na recyklingu opartym na pamięci.
- Określone czasy: Recykling o stałej porze każdego dnia (na przykład 02:00) w celu zagwarantowania recyklingu w okresach niskiego ruchu.
- Odtwarzanie oparte na pamięci: ustaw limity pamięci wirtualnej i pamięci prywatnej (w KB), aby wyzwolić odtwarzanie, jeśli proces roboczy przekroczy te progi.
- Wybierz przycisk Dalej, aby skonfigurować ustawienia dziennika zdarzeń recyklingu, a następnie wybierz pozycję Zakończ.
Używasz polecenia cmdlet, aby skonfigurować recykling puli aplikacji przy użyciu programu PowerShell. Aby na przykład skonfigurować regularny interwał, uruchom następujące polecenie:
$poolName = "Contoso-AppPool"
# Set regular time interval recycling (TimeSpan; 00:00:00 = disabled)
Set-ItemProperty "IIS:\AppPools\$poolName" `
recycling.periodicRestart.time "29:00:00"
# Add a specific-time recycle trigger (e.g., 2:00 AM daily)
$recycleTime = New-Object System.TimeSpan 2,0,0
Add-WebConfiguration -Filter "system.applicationHost/applicationPools/add[@name='$poolName']/recycling/periodicRestart/schedule" -Value @{value = $recycleTime}
# Set private memory limit in KB (0 = unlimited)
Set-ItemProperty "IIS:\AppPools\$poolName" `
recycling.periodicRestart.privateMemory 512000
Konfigurowanie limitu czasu bezczynności
Ustawienie limitu czasu bezczynności zatrzymuje proces roboczy po bezczynności (bez żądań) dla określonego okresu. Zwalnia to zasoby serwera, ale oznacza, że pierwsze żądanie po przekroczeniu limitu czasu powoduje opóźnienie zimnego uruchamiania.
# Set idle timeout to 20 minutes (the default value)
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" `
processModel.idleTimeout "00:20:00"
# Disable idle timeout for always-on applications
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" `
processModel.idleTimeout "00:00:00"
Uwaga / Notatka
W Menedżerze usług IIS znajdź limit czasu bezczynności w ustawieniach zaawansowanych puli aplikacji (wybierz pulę, wybierz pozycję Ustawienia zaawansowane w okienku Akcje) w sekcji Model procesu.
Inicjowanie aplikacji i tryb stałego uruchamiania
W środowiskach produkcyjnych, w których zminimalizowanie opóźnienia zimnego startu ma kluczowe znaczenie, zaleca się skonfigurowanie usług IIS w celu proaktywnego uruchamiania pul aplikacji i wstępnego ładowania aplikacji. Gwarantuje to, że proces roboczy jest inicjowany i gotowy do obsługi żądań natychmiast po ponownym uruchomieniu serwera lub recyklingu puli aplikacji, zamiast czekać na pierwsze żądanie przychodzące.
Aby to osiągnąć, skonfiguruj następujące elementy:
-
Tryb uruchamiania puli aplikacji: Ustaw pulę aplikacji
startModenaAlwaysRunning. Instrukcja ta zaleca, aby usługi IIS uruchamiały proces roboczy natychmiast po utworzeniu puli aplikacji lub uruchomieniu serwera. - Moduł inicjowania aplikacji: Włącz funkcję inicjowania aplikacji w systemie Windows Server (jeśli jeszcze nie zainstalowano) i skonfiguruj aplikację do wstępnego ładowania zawartości.
Funkcję inicjowania aplikacji można zainstalować, uruchamiając następujące polecenie programu PowerShell:
Install-WindowsFeature Web-AppIn
Można skonfigurować tryb uruchamiania puli aplikacji za pomocą polecenia cmdlet Set-ItemProperty. Aby na przykład skonfigurować tryb uruchamiania Contoso-AppPool puli aplikacji, uruchom następujące polecenie:
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" -Name startMode -Value "AlwaysRunning"
Tożsamość puli aplikacji
Tożsamość, w ramach której jest uruchamiany proces roboczy, określa, do jakich zasobów systemu Windows (plików, udziałów sieciowych, baz danych) może uzyskiwać dostęp. Usługi IIS obsługują cztery wbudowane typy tożsamości oraz niestandardowe konta usług:
| Typ tożsamości | Opis | Zalecane użycie |
|---|---|---|
| ApplicationPoolIdentity | Automatycznie wygenerowane konto wirtualne dla puli (IIS AppPool\PoolName). Najmniej uprzywilejowane. | Ustawienie domyślne dla większości witryn |
| Networkservice | Wbudowane konto z dostępem do sieci. | Tylko dziedziczone scenariusze |
| LocalSystem | Pełny administrator lokalny. Najwyższe uprawnienia. | Nigdy nie jest zalecane |
| Localservice | Ograniczone konto lokalne, brak dostępu do sieci. | Rzadko potrzebne |
| Konto niestandardowe | Konto domeny lub usługi lokalnej. | Wymagany do dostępu do zasobów sieciowych (udziały plików, program SQL Server) |
Aby skonfigurować tożsamość niestandardową w Menedżerze usług IIS, wykonaj następujące kroki:
- Wybierz pulę aplikacji, a następnie wybierz pozycję Ustawienia zaawansowane w okienku Akcje.
- W obszarze Model przetwarzania wybierz pole Tożsamość, a następnie wybierz przycisk wielokropka (...) .
- W oknie dialogowym Tożsamość puli aplikacji wybierz pozycję Konto niestandardowe i wybierz pozycję Ustaw.
- Wprowadź poświadczenia konta domeny (na przykład
CONTOSO\svc-webapp), a następnie wybierz przycisk OK.
Za pomocą cmdletu Set-ItemProperty konfiguruje się tożsamość niestandardową w PowerShell. Aby na przykład ustawić tożsamość na CONTOSO\svc-webapp, uruchom następujące polecenie:
$poolName = "Contoso-AppPool"
$username = "CONTOSO\svc-webapp"
$password = Read-Host -Prompt "Enter service account password" -AsSecureString
$plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
Set-ItemProperty "IIS:\AppPools\$poolName" processModel.userName $username
Set-ItemProperty "IIS:\AppPools\$poolName" processModel.password $plain
Set-ItemProperty "IIS:\AppPools\$poolName" processModel.identityType 3
Uwaga / Notatka
W przypadku korzystania z niestandardowych kont usług postępuj zgodnie z zasadą najniższych uprawnień. Przyznaj konto tylko wymagane uprawnienia NTFS (zwykle odczyt i wykonanie w katalogu zawartości sieciowej) i unikaj uznania tego konta za członka grupy lokalnych administratorów. Rozważ użycie zarządzanych kont usług, które nie wymagają tyle wysiłku administracyjnego.
Zarządzanie stanem puli aplikacji
Do zarządzania stanami puli aplikacji można użyć poleceń cmdlet programu PowerShell webAppPool.
Stop-WebAppPool -Name "Contoso-AppPool" # Stop
Start-WebAppPool -Name "Contoso-AppPool" # Start
Restart-WebAppPool -Name "Contoso-AppPool" # Recycle worker process
Get-WebAppPoolState -Name "Contoso-AppPool" # Check current state
Uwaga / Notatka
W Menedżerze usług IIS wybierz pulę i użyj linków Start, Stop lub Recycle w okienku Akcje.
Wersja .NET CLR i tryb potoku w puli aplikacji
Podczas konfigurowania puli aplikacji należy ustawić wersję środowiska .NET CLR i tryb potoku. Ustawienie wersji środowiska .NET CLR określa, czy i która wersja środowiska uruchomieniowego platformy .NET jest ładowana w procesie roboczym. Możliwe opcje to:
- Brak kodu zarządzanego. Zasób nie ładuje środowiska uruchomieniowego .NET. Ta funkcja jest używana w przypadku witryn statycznych lub aplikacji opartych na platformach non-.NET.
- Wersja 4.0: ładuje środowisko uruchomieniowe programu .NET Framework 4.x. Wymagane w przypadku aplikacji ASP.NET Web Forms, ASP.NET MVC i web API przeznaczonych dla platformy .NET Framework.
Uwaga / Notatka
Aplikacje ASP.NET Core nie używają środowiska CLR zarządzanego przez IIS. W przypadku hostingu poza procesem ustaw opcję puli na Bez kodu zarządzanego. Moduł ASP.NET Core przekazuje żądania do własnego procesu Kestrel aplikacji.
Tryb przetwarzania określa sposób, w jaki IIS przetwarza przychodzące żądania HTTP. W szczególności określa sposób integracji kodu ASP.NET z potokiem obsługi żądań usług IIS. Dostępne opcje:
- Zintegrowane (zalecane): Potok żądań ASP.NET jest w pełni zintegrowany z potokiem IIS, umożliwiając funkcje takie jak uwierzytelnianie i buforowanie wyjściowe, aby dotyczyły wszystkich typów zawartości.
- Klasyczny: starszy tryb dla starszych aplikacji ASP.NET niezgodnych z trybem zintegrowanym. Unikaj, chyba że jest to wymagane w przypadku zgodności aplikacji.
Obsługa aplikacji 32-bitowych w pulach aplikacji
Domyślnie pule aplikacji usług IIS w 64-bitowych wersjach systemu Windows Server działają w trybie 64-bitowym. Jednak niektóre starsze aplikacje internetowe mogą zależeć od składników 32-bitowych lub bibliotek niezgodnych z wykonywaniem 64-bitowym. W takich przypadkach można włączyć obsługę 32-bitową dla puli aplikacji.
Aby włączyć aplikacje 32-bitowe w Menedżerze usług IIS:
- Otwórz Menedżera usług IIS i wybierz pozycję Pule aplikacji w okienku Połączenia.
- Wybierz docelową pulę aplikacji i wybierz pozycję Ustawienia zaawansowane w okienku Akcje.
- Ustaw wartość True dla opcji Włącz aplikacje 32-bitowe.
- Wybierz OK, aby zastosować zmianę.
Aby włączyć obsługę 32-bitową przy użyciu programu PowerShell, użyj Set-ItemProperty polecenia cmdlet . Aby na przykład ustawić obsługę 32-bitową w systemie Contoso-AppPool, uruchom następujące polecenie:
Set-ItemProperty "IIS:\AppPools\Contoso-AppPool" -Name enable32BitAppOnWin64 -Value $true