Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gambaran Umum
Elemen <cpu>
<add>
elemen dalam <applicationPools>
koleksi mengonfigurasi nilai untuk parameter penggunaan CPU dan tindakan CPU yang akan digunakan dalam kumpulan aplikasi.
Dukungan NUMA
Akses Memori Non-Seragam (NUMA) adalah metode berbasis perangkat keras untuk mengaitkan prosesor ke memori khusus mereka sendiri. NUMA digunakan untuk meningkatkan kecepatan prosesor sebagai alternatif dari model multiprosesor simetris (SMP) tradisional untuk dukungan multiprosesor. Anda dapat mengatur IIS 8 dan yang lebih baru untuk mendistribusikan dan mengafinisikan prosesnya di NUMA. Penggunaan NUMA dikonfigurasi dalam elemen CPU oleh atribut numaNodeAssignment yang memungkinkan IIS mengidentifikasi simpul NUMA yang paling optimal ketika proses pekerja IIS akan dimulai, dan atribut numaNodeAffinityMode yang menentukan bagaimana utas dari proses pekerja IIS diafinitisasi ke simpul NUMA. NUMA juga dikonfigurasi menggunakan atribut MaxProcesses dari elemen processModel, yang ketika diatur ke 0
menentukan bahwa IIS secara otomatis menjalankan jumlah proses pekerja yang sama karena ada simpul NUMA. Untuk informasi selengkapnya, lihat Penskalaan Multicore IIS 8.0 pada Perangkat Keras NUMA.
Logika pemilihan NUMA dan jenis afinitas dapat diatur dalam kotak dialog Pengaturan Tingkat Lanjut hanya jika IIS berjalan pada perangkat keras NUMA.
Kompatibilitas
Versi | Catatan |
---|---|
IIS 10.0 | Elemen <cpu> tidak dimodifikasi di IIS 10.0. |
IIS 8.5 | Elemen <cpu> tidak dimodifikasi di IIS 8.5. |
IIS 8.0 | Dua nilai enum ditambahkan ke action atribut untuk menentukan perilaku pembatasan. Atribut processorGroup ditambahkan untuk menentukan jumlah grup prosesor yang digunakan. Atribut numaNodeAssignment dan numaNodeAffinityMode ditambahkan untuk menentukan perilaku simpul NUMA. |
IIS 7.5 | Elemen <cpu> tidak dimodifikasi dalam IIS 7.5. |
IIS 7.0 | Elemen <cpu> ini diperkenalkan di IIS 7.0. |
IIS 6.0 | Elemen menggantikan <cpu> bagian dari properti metabase IIS 6.0 IIsApplicationPools . |
Siapkan
Koleksi <applicationPools>
disertakan dalam penginstalan default IIS 7 dan yang lebih baru.
Bagaimana Caranya
Cara mengedit pengaturan konfigurasi CPU
Buka Manajer Layanan Informasi Internet (IIS):
Jika Anda menggunakan Windows Server 2012 atau Windows Server 2012 R2:
- Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Manajer Layanan Informasi Internet (IIS).
Jika Anda menggunakan Windows 8 atau Windows 8.1:
- Tahan tombol Windows, tekan huruf X, lalu klik Panel Kontrol.
- Klik Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
Jika Anda menggunakan Windows Server 2008 atau Windows Server 2008 R2:
- Pada taskbar, klik Mulai, arahkan ke Alat Administratif, lalu klik Manajer Layanan Informasi Internet (IIS).
Jika Anda menggunakan Windows Vista atau Windows 7:
- Pada taskbar, klik Mulai, lalu klik Panel Kontrol.
- Klik dua kali Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
Di panel Koneksi , perluas nama server, klik Kumpulan Aplikasi, lalu klik kumpulan aplikasi yang ingin Anda edit.
Di panel Tindakan , klik Pengaturan Tingkat Lanjut...
Dalam kotak dialog Pengaturan Tingkat Lanjut , klik properti CPU yang ingin Anda edit, lalu edit nilai di bagian nilai properti dari kotak dialog, lalu klik OK. Misalnya, Anda dapat mengubah Limit Action menjadi NoAction, KillW3wp, Throttle, atau ThrottleUnderLoad.
Cara mengonfigurasi IIS untuk digunakan dengan perangkat keras Non-Uniform Memory Access (NUMA)
Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Manajer Layanan Informasi Internet (IIS).
Di panel Koneksi , perluas nama server, lalu klik Kumpulan Aplikasi.
Di panel Kumpulan Aplikasi , pilih kumpulan yang ingin Anda konfigurasi untuk NUMA.
Di panel Tindakan , pilih Pengaturan Tingkat Lanjut.
Di bawah Model Proses, atur Proses Pekerja Maksimum ke
0
.Di bawah CPU, atur processorGroup, numaNodeAffinityMode, dan numaNodeAssignment.
Klik OK.
Konfigurasi
Atribut
Atribut | Deskripsi | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
action |
Atribut enum opsional. Mengonfigurasi tindakan yang dilakukan IIS saat proses pekerja melebihi batas CPU yang dikonfigurasi. Atribut tindakan dikonfigurasi berdasarkan kumpulan per aplikasi. Atribut tindakan dapat menjadi salah satu nilai yang mungkin berikut ini. Nilai defaultnya adalah NoAction .
|
||||||||||
limit |
Atribut uint opsional. Mengonfigurasi persentase maksimum waktu CPU (dalam 1/1000 persen) yang diproses pekerja dalam kumpulan aplikasi diizinkan untuk digunakan selama jangka waktu tertentu seperti yang ditunjukkan oleh atribut resetInterval. Jika batas yang ditetapkan oleh atribut batas terlampaui, peristiwa ditulis ke log peristiwa dan serangkaian peristiwa opsional dapat dipicu. Peristiwa opsional ini ditentukan oleh atribut tindakan. Catatan: Di IIS 8.5 ke atas, tetapkan batas dalam persen di panel CPU IIS Manager. Di IIS 8.0, tetapkan batas dalam 1/1000 persen di panel CPU Manajer IIS. Untuk kedua kasus, limit atribut dalam applicationHost.config berada di 1/1000ths dari satu persen. Nilai defaultnya adalah 0 , yang menonaktifkan pembatasan CPU. |
||||||||||
numaNodeAffinityMode |
Atribut enum opsional. Menentukan bagaimana utas proses yang diafinisiskan ke simpul NUMA akan dijadwalkan pada inti simpul. Atribut numaNodeAffinityMode dapat menjadi salah satu nilai yang mungkin berikut. Nilai defaultnya adalah Soft .
|
||||||||||
numaNodeAssignment |
Atribut enum opsional. Menentukan bagaimana IIS akan menentukan simpul NUMA (akses memori non-seragam) mana yang akan diafinisiskan prosesnya. Simpul NUMA berisi kluster inti yang berbagi satu bank memori. Atribut ini tersedia di Pengaturan Tingkat Lanjut CPU hanya jika simpul NUMA tersedia. Atribut numaNodeAssignment dapat menjadi salah satu nilai yang mungkin berikut. Nilai defaultnya adalah Most Available Memory .
|
||||||||||
processorGroup |
Atribut int opsional. Jumlah grup prosesor yang digunakan (berbasis nol). Grup prosesor berisi beberapa inti. Atribut Grup Prosesor tersedia di Pengaturan Tingkat Lanjut CPU hanya jika server memiliki beberapa grup prosesor. Nilai defaultnya adalah 0 , yang berarti bahwa satu grup prosesor digunakan. |
||||||||||
resetInterval |
Atribut timeSpan opsional. Menentukan periode reset (dalam menit) untuk batas pemantauan dan pembatasan CPU pada kumpulan aplikasi. Ketika jumlah menit berlalu sejak proses terakhir akuntansi direset sama dengan angka yang ditentukan oleh properti ini, IIS mengatur ulang timer CPU untuk interval pengelogan dan batas. Penting: Nilai resetInterval harus lebih besar dari waktu antara operasi pengelogan, jika tidak, IIS akan mengatur ulang penghitung sebelum pengelogan terjadi, dan akuntansi proses tidak akan terjadi. Catatan: Karena akuntansi proses di IIS menggunakan objek pekerjaan Windows untuk memantau waktu CPU untuk seluruh proses, akuntansi proses hanya akan mencatat dan membatasi aplikasi yang terisolasi dalam proses terpisah dari IIS. Nilai defaultnya adalah 00:05:00 . |
||||||||||
smpAffinitized |
Atribut Boolean opsional. Menentukan apakah proses pekerja tertentu yang ditetapkan ke kumpulan aplikasi juga harus ditetapkan ke CPU tertentu. Properti ini digunakan bersama dengan atribut smpProcessorAffinityMask dan smpProcessorAffinityMask2 . Nilai defaultnya adalah false . |
||||||||||
smpProcessorAffinityMask |
Atribut uint opsional. Menentukan masker prosesor heksadesimal untuk komputer multi-prosesor, yang menunjukkan ke CPU mana proses pekerja dalam kumpulan aplikasi harus terikat. Sebelum properti ini berlaku, atribut smpAffinitized harus diatur ke true untuk kumpulan aplikasi. Catatan: Pada komputer 64-bit, atribut smpProcessorAffinityMask berisi DWORD berurutan rendah untuk masker prosesor, dan atribut smpProcessorAffinityMask2 berisi DWORD pesanan tinggi untuk masker prosesor. Pada komputer 32-bit, atribut smpProcessorAffinityMask2 tidak berpengaruh. Jika Anda mengatur nilai ke 1 (yang sesuai dengan 00000000000000001 dalam biner), proses pekerja dalam kumpulan aplikasi hanya berjalan pada prosesor pertama. Jika Anda mengatur nilai ke 2 (yang sesuai dengan 0000000000000010 dalam biner), proses pekerja hanya berjalan pada prosesor kedua. Jika Anda mengatur nilai ke 3 (yang sesuai dengan 0000000000000011 dalam biner), proses pekerja berjalan pada prosesor pertama dan kedua. Catatan: Jangan atur properti ini ke 0. Melakukannya menonaktifkan afinitas multiproscessing simetris (SMP) dan membuat kondisi kesalahan. Ini berarti bahwa proses yang berjalan pada satu CPU tidak akan tetap berafiliasi dengan CPU tersebut sepanjang masa pakainya. Nilai defaultnya adalah 4294967295 . |
||||||||||
smpProcessorAffinityMask2 |
Atribut uint opsional. Menentukan masker prosesor heksadesimal DWORD berurutan tinggi untuk komputer multi-prosesor 64-bit, yang menunjukkan CPU mana yang harus diproses pekerja dalam kumpulan aplikasi. Sebelum properti ini berlaku, atribut smpAffinitized harus diatur ke true untuk kumpulan aplikasi. Catatan: Pada komputer 64-bit, atribut smpProcessorAffinityMask berisi DWORD berurutan rendah untuk masker prosesor, dan atribut smpProcessorAffinityMask2 berisi DWORD pesanan tinggi untuk masker prosesor. Pada komputer 32-bit, atribut smpProcessorAffinityMask2 tidak berpengaruh. Nilai defaultnya adalah 4294967295 . |
Elemen Anak
Tidak ada.
Sampel Konfigurasi
Sampel konfigurasi berikut mengonfigurasi satu kumpulan aplikasi bernama DefaultAppPool dan mengatur CPU menjadi 50%, dengan tindakan untuk mematikan proses pekerja dengan interval reset 10 menit.
<applicationPools>
<add name="DefaultAppPool">
<cpu limit="50000" action="KillW3wp" resetInterval="00:10:00" />
</add>
<applicationPoolDefaults>
<processModel identityType="NetworkService" />
</applicationPoolDefaults>
</applicationPools>
Kode Sampel
Sampel kode berikut mengonfigurasi kumpulan aplikasi default untuk menghentikan proses pekerja ketika melebihi batas CPU, dan mengonfigurasi interval reset menjadi empat menit.
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].cpu.action:"KillW3wp" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].cpu.resetInterval:"00:04:00" /commit:apphost
Catatan
Anda harus memastikan untuk mengatur parameter penerapan ke apphost
saat Anda menggunakan AppCmd.exe untuk mengonfigurasi pengaturan ini. Ini menerapkan pengaturan konfigurasi ke bagian lokasi yang sesuai dalam file 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 = FindElement(applicationPoolsCollection, "add", "name", @"DefaultAppPool");
if (addElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement cpuElement = addElement.GetChildElement("cpu");
cpuElement["action"] = @"KillW3wp";
cpuElement["resetInterval"] = TimeSpan.Parse("00:04:00");
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
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 = FindElement(applicationPoolsCollection, "add", "name", "DefaultAppPool")
If (addElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim cpuElement As ConfigurationElement = addElement.GetChildElement("cpu")
cpuElement("action") = "KillW3wp"
cpuElement("resetInterval") = TimeSpan.Parse("00:04:00")
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
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 addElementPos = FindElement(applicationPoolsCollection, "add", ["name", "DefaultAppPool"]);
if (addElementPos == -1) throw "Element not found!";
var addElement = applicationPoolsCollection.Item(addElementPos);
var cpuElement = addElement.ChildElements.Item("cpu");
cpuElement.Properties.Item("action").Value = "KillW3wp";
cpuElement.Properties.Item("resetInterval").Value = "00:04:00";
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
Vbscript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
addElementPos = FindElement(applicationPoolsCollection, "add", Array("name", "DefaultAppPool"))
If (siteElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set addElement = applicationPoolsCollection.Item(addElementPos)
Set cpuElement = addElement.ChildElements.Item("cpu")
cpuElement.Properties.Item("action").Value = "KillW3wp"
cpuElement.Properties.Item("resetInterval").Value = "00:04:00"
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function