プロセッサアフィニティ(プロセッサ親和性)の概要

バージョン 3.5.27 より、Wrapper プロセスと管理されているJVM プロセスの両方のプロセッサアフィニティ(プロセッサ親和性)の設定が可能です。

プロセッサアフィニティを使用すると、すべての中央処理装置(CPU)ではなく、指定の CPU のみでプロセスを実行するように設定できます。

各 Wrapper プロセスと JVM プロセスはプロセッサアフィニティの設定ができる各自のプロパティを持っていますが、Wrapper のみのプロパティを設定すると JVM プロセスも同じ設定を受け継がれ、自動的に Wrapper プロセスと同じ CPU(複数可)で実行されます。

注意

  • Windows や Linux で CPU アフィニティを構成する機能はバージョン 3.5.27 で 追加されました。
  • バージョン 3.5.28から AIX、FreeBSD、HP-UX や Solaris で CPU アフィニティの設定ができるようになりました。 ただし、HP-UX と Solaris では、各プロセス(Wrapper プロセス、もしくは JVM プロセス)に一つの CPU としか親和性を持つことが出来ません。
  • Mac OSX では、プロセッサを識別するためのインターフェイスを抽出しないため、 現在、このシステムにプロセスアフィニティを実装することはできません。
  • プロセッサアフィニティ機能は、64 を超えるロジカルプロセッサを搭載したシステムではテストされていません。

Wrapper プロセスのプロセッサアフィニティ設定に使用されるプロパティを以下に説明します。

JVM プロセスのプロセッサアフィニティ設定に使用されるプロパティを以下に説明します。

<n>]コンポーネント:

上記プロパティの[<n>]コンポーネントは 「1」からカウントされ、特定の CPU を指定する整数です。 これは、Wrapper が実行されるマシンに存在する実際のCPUの数以下である必要があります。

注意

システムレベルで CPU アフィニティを設定すると(たとえば、タスクマネージャまたはコマンドプロンプトから)、最初の CPU にインデックス 0 が割り当てられる場合があります。 実際には、CPUにインデックスを付ける方法を定義する標準はなく、オペレーティングシステムにより、0 から、もしくは 1 からインデックスされることがあります。 そのため、Wrapper を設定するときに最初の CPU をインデックス1からカウントするようにこちらで設定しました。

Wrapper プロセスのプロセッサアフィニティのプロパティ

wrapper.cpu_affinity.set プロパティ

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

Wrapper に対してプロセッサアフィニティを有効にするか無効にするかを定義します。 デフォルト値は「FALSE」で、Wrapper は全ての CPU で実行されます。

Wrapper レベルでプロパティを「TRUE」に設定すると、アフィニティ設定を有効にします。

例:
wrapper.cpu_affinity.set=TRUE

wrapper.cpu_affinity.default プロパティ

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

このプロパティを「TRUE」に設定すると、最初は Wrapper にすべての CPU を許可します。 Wrapper にのすべての CPU を最初にブロックするには、「FALSE」に設定します。 デフォルト値は 「FALSE」です。

このプロパティは個々の CPU の例外を作成するために最低でもwrapper.cpu_affinity.<n>の一つのプロパティに上書きされるためにあります。

例1(デフォルトですべての CPU を無効にする):
wrapper.cpu_affinity.default=FALSE
例2(デフォルトですべての CPU を有効にする):
wrapper.cpu_affinity.default=TRUE

注意

もし、wrapper.cpu_affinity.default を「TRUE」に設定した場合、wrapper.cpu_affinity.<n> プロパティを1つでも「FALSE」に設定しないと、プロセッサアフィニティが無効になっている場合と同じ効果になります。

逆に、wrapper.cpu_affinity.default を「FALSE」に設定しても、wrapper.cpu_affinity.<n> プロパティを1つでも「TRUE」に設定しないと、Wrapper はマシンのどの CPU でも実行できないため、例外が発生します。(wrapper.cpu_affinity.strictを参照。 )

wrapper.cpu_affinity.<n> プロパティ群

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

こちらのプロパティのセットは Wrapper プロセスに個々の CPU を許可/ブロックにするために使われています。 対象となる CPU ごとに1行を追加することにより、1つまたは複数のプロセッサを許可/ブロックできます。

上記プロパティの[<n>]コンポーネントは「1」からカウントアップし、特定の CPU を指定する整数です。 この数字は、Wrapper が実行されるマシンに実際に存在する CPU の数以下でなければなりません。

例1(Wrapper は CPU1 および CPU2 のみに実行する許可):
wrapper.cpu_affinity.default=FALSE
wrapper.cpu_affinity.1=TRUE
wrapper.cpu_affinity.2=TRUE
例2(Wrapper を CPU1 および CPU3 実行しないようにする):
wrapper.cpu_affinity.default=TRUE
wrapper.cpu_affinity.1=FALSE
wrapper.cpu_affinity.3=FALSE

注意

HP-UX および Solaris では、Wrapper に1つの CPU と関係を持つことしかできません。 複数の CPU が起動しているような構成の場合、Wrapper はデフォルトで停止し、wrapper.cpu_affinity.strict が「FALSE」に設定されていた場合は、最初に起動した CPU を選択します。

wrapper.cpu_affinity.strict

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

このプロパティのデフォルト値は「TRUE」で、Wrapper のコンフィグレーションプロパティが 実際の CPU と一致しない場合、Wrapper が例外を記録し、最終的に停止します。 wrapper.cpu_affinity.strict を「FALSE」に設定することで、その例外をブロックせず、継続実行することが出来ます。それで Wrapper は「警告」ステータスのメッセージをログに記録します。

例:
wrapper.cpu_affinity.strict=FALSE

警告

例外は次の通りです。

  • CPU のいずれかが[wrapper.cpu_affinity.<n>]で定義されているが、実際にマシンに存在しません。 wrapper.cpu_affinity.strict=FALSE に設定すると、Wrapper は存在しない CPU を無視します。
  • Wrapper はマシン上の全ての CPU で実行不可に設定されています。 wrapper.cpu_affinity.strict=FALSE に設定すると、Wrapper はマシン上のすべての CPU で実行できるようになります(プロセッサアフィニティが無効になっている場合と同様)。
  • 何らかの理由でオペレーティングシステムは指定された CPU のいずれも割り当てることはできません。 wrapper.cpu_affinity.strict=FALSE に設定すると、Wrapper はマシン上のすべての CPU で実行できるようになります(プロセッサアフィニティが無効になっている場合と同様)。

JVM プロセス用のプロセッサアフィニティのプロパティ

wrapper.java.cpu_affinity.set プロパティ

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

JVM プロセス用のプロセッサアフィニティを有効、もしくは無効に設定します。 デフォルト値は「FALSE」 で、JVM プロセスは全ての CPU で実行できます。

JVM のアフィニティ設定を有効にするには「TRUE」に設定してください。

例:
wrapper.java.cpu_affinity.set=TRUE

wrapper.java.cpu_affinity.default プロパティ

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

最初から全ての CPU を JVM プロセスで許可するにはこのプロパティを「TRUE」に設定してください。「FALSE」に設定すると、最初から JVM プロセスのすべての CPU をブロックします。 デフォルト値は「FALSE」です。

個々の CPU の例外を作成するために、このプロパティは最低でも一つの wrapper.cpu_affinity.<n> のプロパティに上書きされるためにあります。

例1(デフォルトですべての CPU を無効にする):
wrapper.java.cpu_affinity.default=FALSE
例2(デフォルトですべての CPU を有効にする):
wrapper.java.cpu_affinity.default=TRUE

注意

wrapper.java.cpu_affinity.default]を「TRUE」に設定し、[wrapper.java.cpu_affinity.<n>]プロパティをどれも「FALSE」に設定しなかった場合、これにより JVM プロセスが任意の CPU で実行されることになります。

逆に、[wrapper.java.cpu_affinity.default」が「FALSE」に設定されているが、[wrapper.java.cpu_affinity.<n>]プロパティのいずれも「TRUE」に設定されていない場合、JVM プロセスはマシンのどの CPU でも実行できないため、例外が発生します。(wrapper.java.cpu_affinity.strict を参照)。

wrapper.java.cpu_affinity.<n> プロパティ群

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

このプロパティのセットは、JVM プロセスに対して個々の CPU を認可またはブロックするために使用されます。 対象となる CPU ごとに1行を追加することで、1つまたは複数のプロセッサを認可/ブロックすることができます。

上記プロパティの[<n>]コンポーネントは「1」からカウントアップし、特定の CPU を指定する整数です。 この数字は、Wrapper が実行されるマシンに実際に存在する CPU の数以下でなければなりません。

例1(JVM プロセスを CPU1 または CPU2 のみに実行できる):
wrapper.java.cpu_affinity.default=FALSE
wrapper.java.cpu_affinity.1=TRUE
wrapper.java.cpu_affinity.2=TRUE
例2(JVMプ ロセスを CPU1 または CPU3 で実行することを防ぐ):
wrapper.java.cpu_affinity.default=TRUE
wrapper.java.cpu_affinity.1=FALSE
wrapper.java.cpu_affinity.3=FALSE

注意

HP-UX と Solaris の場合、Wrapper に1つの CPU としか紐づけする事ができません。構成で複数の CPU が有効になっている場合、Wrapper は規定で停止する、もしくは[wrapper.java.cpu_affinity.strict]が「FALSE」に設定されている場合、最初の有効な CPU を選択します。

wrapper.java.cpu_affinity.strict プロパティ

対応バージョン :3.5.27
対応エディション :プロフェッショナル版スタンダード版 (未対応)コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)LinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OS (未対応)IBM z/Linux

このプロパティのデフォルト値は「TRUE」 で、Wrapper の設定がマシン上の実際の CPU と一致しない場合、Wrapper が例外を記録し、最終的に停止します。 その例外をクロックせず、継続実行するには[wrapper.java.cpu_affinity.strict]を「FALSE」 に設定することが出来ます。そうすると Wrapper は「警告」ステータスをメッセージログに記録します。

例:
wrapper.java.cpu_affinity.strict=FALSE

警告

例外は次の通りです。

  • CPU のいずれかが[wrapper.java.cpu_affinity.<n>]を「TRUE」に定義されていたが、実際にマシンに存在しません。 wrapper.java.cpu_affinity.strict=FALSE に設定すると、Wrapper は存在しない CPU を無視します。
  • Wrapper はマシン上の全ての CPU で実行することが出来ないように設定されています。 wrapper.java.cpu_affinity.strict=FALSE に設定すると、Wrapper はマシン上のすべての CPU で実行できるようになります(プロセッサアフィニティが無効になっていると同様)。
  • 何らかの理由で、オペレーティングシステムは、指定された CPU のいずれも割り当てることはできません。 wrapper.java.cpu_affinity.strict=FALSE に設定すると、Wrapper はマシン上のすべての CPU で実行できるようになります(プロセッサアフィニティが無効になっている場合と同様)。