アプリケーション プールの CPU 設定 <cpu>
- 概要
- 互換性
- セットアップ
- 方法
- 構成
- サンプル コード
※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。
概要
<applicationPools>
コレクション内の <add>
要素の <cpu>
要素は、アプリケーション プールで使用される CPU 使用率パラメーターと CPU 処理の値を構成します。
互換性
IIS 7.0 | IIS 6.0 | |
---|---|---|
注意 | <cpu> は IIS 7.0 で新たに導入された要素です。 |
|
セットアップ
<applicationPools>
コレクションは、IIS 7.0 の既定のインストールに含まれています。
方法
ラピッド フェール保護構成設定の編集方法
タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
[接続] ウィンドウで当該サーバー名を展開して [アプリケーション プール] をクリックし、編集するアプリケーション プールをクリックします。
[操作] ウィンドウで [詳細設定] をクリックします。
[詳細設定] ダイアログ ボックスで、編集する CPU プロパティをクリックし、ダイアログ ボックスのプロパティ値のセクションで値を編集して、[OK] をクリックします。たとえば、[制限動作] を [NoAction] または [KillW3wp] に変更できます。
構成
属性
属性 | 説明 |
---|---|
action |
オプションの enum 属性。
構成された CPU の制限をワーカー プロセスが超えたときに実行される IIS の処理を構成します。action 属性の構成はアプリケーション プールごとに行います。 action 属性には、次のいずれかの値を指定できます。既定値は -------------------------------------------------------------------------------------------------- 値: KillW3wp 説明:
値: NoAction 説明:
|
limit |
オプションの uint 属性。
resetInterval 属性で指定された期間中にアプリケーション プールのワーカー プロセスが消費できる CPU 時間の最大割合 (1/1000 パーセント単位) を構成します。limit 属性で設定された制限を超えた場合、イベントがイベント ログに書き込まれます。また、オプションのイベント セットがトリガーされるように指定できます。これらのオプションのイベントは、action 属性で決定します。 既定値は |
resetInterval |
オプションの timeSpan 属性。
CPU 監視およびアプリケーション プールの調整制限のリセット期間 (分単位) を指定します。前回のプロセス アカウンティングのリセットから経過した分数が、このプロパティで指定された数値と等しくなると、IIS はログ記録および制限間隔の両方の CPU タイマーをリセットします。 重要 : resetInterval の値は、ログ操作の間隔より大きくする必要があります。そうしないと、IIS はログ記録が行われる前にカウンターをリセットしてしまい、プロセス アカウンティングが行われなくなります。 注 : IIS のプロセス アカウンティングでは Windows のジョブ オブジェクトを使用してプロセス全体の CPU 時間を監視するので、プロセス アカウンティングでは IIS から独立したプロセス内に分離されているアプリケーションのログ記録および調整のみが行われます。 既定値は |
smpAffinitized |
オプションの Boolean 属性。
アプリケーション プールに割り当てられた特定のワーカー プロセスが、指定された CPU にも割り当てられる必要があるかどうかを指定します。このプロパティは、smpProcessorAffinityMask 属性および smpProcessorAffinityMask2 属性と組み合わせて使用します。 既定値は |
smpProcessorAffinityMask |
オプションの uint 属性。
マルチプロセッサ コンピューターの 16 進数のプロセッサ マスクを指定して、どの CPU にアプリケーション プールのワーカー プロセスがバインドされる必要があるかを示します。このプロパティを有効にするには、アプリケーション プールに対して smpAffinitized 属性を true に設定してください。 注 : 64 ビット コンピューターでは、smpProcessorAffinityMask 属性にはプロセッサ マスクの下位 DWORD が含まれ、smpProcessorAffinityMask2 属性にはプロセッサ マスクの上位 DWORD が含まれます。32 ビット コンピューターでは、smpProcessorAffinityMask2 属性は無効です。 値を 1 (2 進法で 00000000000000001 に相当) に設定した場合、アプリケーション プールのワーカー プロセスは、1 番目のプロセッサでのみ実行されます。値を 2 (2 進法で 0000000000000010 に相当) に設定した場合、ワーカー プロセスは、2 番目のプロセッサでのみ実行されます。値を 3 (2 進法で 0000000000000011 に相当) に設定した場合、ワーカー プロセスは、1 番目と 2 番目の両方のプロセッサで実行されます。 注 : このプロパティを 0 に設定しないでください。0 に設定すると、対称型マルチプロセッシング (SMP) アフィニティが無効になり、エラー状況が発生します。つまり、ある CPU で実行中のプロセスが、その有効期間中ずっと同じ CPU との関連付けを維持できなくなるということです。 既定値は |
smpProcessorAffinityMask2 |
オプションの uint 属性。
64 ビット マルチプロセッサ コンピューターの上位 DWORD 16 進数プロセッサ マスクを指定して、どの CPU にアプリケーション プールのワーカー プロセスがバインドされる必要があるかを示します。このプロパティを有効にするには、アプリケーション プールに対して smpAffinitized 属性を true に設定してください。 注 : 64 ビット コンピューターでは、smpProcessorAffinityMask 属性にはプロセッサ マスクの下位 DWORD が含まれ、smpProcessorAffinityMask2 属性にはプロセッサ マスクの上位 DWORD が含まれます。32 ビット コンピューターでは、smpProcessorAffinityMask2 属性は無効です。 既定値は |
子要素
なし。
構成サンプル
次の構成サンプルでは、DefaultAppPool という名前の 1 つのアプリケーション プールを構成し、CPU を 50% に設定します。リセット間隔を 10 分にして、ワーカー プロセスを強制終了する処理を指定します。
<applicationPools>
<add name="DefaultAppPool">
<cpu limit="50000" action="KillW3wp" resetInterval="00:10:00" />
</add>
<applicationPoolDefaults>
<processModel identityType="NetworkService" />
</applicationPoolDefaults>
</applicationPools>
サンプル コード
次のコード サンプルでは、CPU 制限を超えるとワーカー プロセスが強制終了されるように既定のアプリケーション プールを構成します。リセット間隔は 4 分に構成します。
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
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 value = Null Then
value = CStr(value)
End If
If Not value = 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