ヘッダーをスキップ
Oracle Containers for J2EE構成および管理ガイド
10g(10.1.3.5.0)
B56030-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

10 タスク・マネージャとスレッド・プールの構成

この章では、OC4Jインスタンスに対するタスク・マネージャの構成、およびOC4JインスタンスおよびWebサイト・アプリケーションに対するスレッド・プールの構成に関するガイドラインを示します。この章の内容は次のとおりです。

OC4Jタスク・マネージャの構成

タスク・マネージャは、HTTPセッションのタイムアウトや変更済構成ファイルのチェックなど、保留タスクをすべて実行するバックグラウンド・プロセスです。デフォルトでは、1秒(1000ミリ秒)間隔で実行します。

タスク・マネージャの実行間隔は、server.xml構成ファイルの<application-server>要素のtaskmanager-granularity属性にミリ秒単位で指定されます。これは、OC4Jコンテナ・レベルのパラメータです。デフォルトは1000ミリ秒です。

たとえば、server.xmlの次のエントリは、1分(60000ミリ秒)間隔で実行するようにタスク・マネージャを構成します。

<application-server ...  taskmanager-granularity="60000" ...>

server.xmlの変更後に、OC4Jを再起動する必要があります。


注意:

このパラメータは、TaskManager MBeanのgranularity属性を使用して設定することもできます。この属性は、Application Server ControlのJMXブラウザからアクセスできます。

MBeanへのアクセスおよび使用によるOC4Jプロセスの管理の詳細は、第12章「OC4JでのMBeanの使用方法」を参照してください。


OC4Jスレッド・プールの構成

スレッド・プールは、OC4JプロセスおよびOC4Jインスタンスにデプロイされているアプリケーションで利用および再利用するためのスレッドを作成して格納します。要求に応じて新規スレッドを作成するのではなく、既存のスレッドを再利用ことで、パフォーマンスを向上させ、JVMや基礎となるオペレーティング・システムに対する負荷を軽減します。

表10-1に、OC4Jで使用可能なスレッド・プールを示します。

表10-1 OC4Jスレッド・プール

スレッド・プール 説明

system

OC4Jランタイムで使用します。

このプールのスレッドでは、OC4Jインスタンスにデプロイされているアプリケーションを実行できません。

このスレッド・プールの構成は変更しないでください。

http

HTTPおよびAJPリクエストを処理します。

rmi requestスレッド・プールが存在しない場合は、httpスレッド・プールがRMIリクエストを処理します。

rmi connectionスレッド・プールが存在しない場合は、httpスレッド・プールがRMI接続を処理します。

jca

リソース・アダプタからのワーク管理リクエストを処理します。

OC4Jインスタンスにデプロイされるリソース・アダプタで必要な場合、リソース・アダプタ(JMSコネクタなど)で使用されるワーカー・スレッドを格納するワーク管理スレッド・プールは、OC4Jプロセス内に作成されます。

rmi request

RMIリクエストを処理します。

このオプションのスレッド・プールを使用すると、スレッド・リソースの割当てをより強力に管理できます。

rmi connection

RMI接続を処理します。

このオプションのスレッド・プールには、RMI接続でブロック読取りを実行するスレッドが用意されています。

rmi connectionプールは、RMI接続のみでなく、RMIスレッド・リスナーおよびJMSサーバー・スレッドにも使用されます。

カスタム

1つ以上のアプリケーションで使用します。

アプリケーションに個別のカスタム・スレッド・プールを使用すると、スレッド・リソースの競合を減らすことができます。カスタム・スレッド・プールは、クラスタ内の一連のアプリケーションで共有できます。


デフォルトでは、OC4Jの起動時にこれらのスレッド・プールが3つ作成されます。

各スレッド・プールでは、アイドル・スレッドは、リクエスト数が使用可能なスレッド数を超えないかぎり、新規スレッドが生成される前に再利用されます。非アクティブ状態で10分経過すると、アイドル・スレッドは自動的に破棄されます。

各スレッド・ファイルは、server.xmlファイルの<thread-pool>または<custom-thread-pool>要素によって定義されます。表10-2にこれらの要素の属性をまとめ、デフォルトの属性値を示します。

デフォルトのスレッド・プール構成を使用することも、変更することも可能です。各OC4Jインスタンスでは、systemを除く任意のスレッド・プールの属性値を変更できます。また、rmi requestrmi connectionおよび1つ以上のカスタム・スレッド・プールを追加できます。次の各項では、スレッド・プールの構成方法について説明します。

表10-2 <thread-pool>および<custom-thread-pool>の属性

属性 説明

name

name属性にはスレッド・プールの名前を指定します。デフォルト値はありません。

カスタム・スレッド・プールの場合、名前には任意の文字列値を指定できます。

<thread-pool>要素では、名前は次に示す値のいずれかである必要があります。

  • system

    OC4Jランタイムで使用するスレッド・プール

  • http

    HTTPリクエスト、AJPリクエスト、RMIリクエスト(rmi requestスレッド・プールが構成されていない場合)およびRMI接続(rmi connectionスレッド・プールが構成されていない場合)を処理するスレッド・プール

  • jca

    J2CAワーク・マネージャがリソース・アダプタ・リクエストを処理するためのワーク管理スレッド・プール

  • rmi request

    RMIリクエストを処理するスレッド・プール

  • rmi connection

    RMI接続でスレッドによりブロック読取りが実行されるスレッド・プール

これらの名前付きプールのスレッドの名前にはそれぞれ、SystemThreadGroup_HTTPThreadGroup_WorkManager_RMIRequestThreadGroup_およびRMIConnectionThreadGroup_という接頭辞が付いており、接尾辞は増加するカウンタです。

min

プールに作成するスレッドの最小数。デフォルト値は0です。

jcaスレッド・プールのスレッドの最小数は、マシンにインストールされているCPU数の倍数としてください。しかし、この数値は小さく設定する必要があります。スレッドの数が多いほど、オペレーティング・システムおよびガベージ・コレクタの負荷が大きくなります。

rmi connectionスレッド・プールのminの値は、任意の時点で保持する物理的な接続数に比例します。queue値は、接続トラフィックの急増に対処します。

max

プールに作成できるスレッドの最大数。最大サイズ未満でかつアイドル・スレッドがない場合に、新規スレッドが生成されます。新規スレッドが生成される前に、アイドル・スレッドが使用されます。デフォルト値は、1024です。

通常、rmi connectionスレッド・プールでは、内部で使用するためにRMIおよびJMSリスナーとして3つのスレッドが作成されるため、スレッドの必要な最大数に3を足してmaxの値を設定する必要があります。たとえば、max="16"と指定すると、リクエストの処理に使用可能なスレッドは13のみです。同様に、max値が20の場合には、使用可能なスレッドは17のみです。

rmi connectionスレッド・プールのmaxの値も、任意の時点で保持する物理的な接続数に比例します。queue値は、接続トラフィックの急増に対処します。

jcaスレッド・プールのスレッドの最大数は、マシンにインストールされているCPU数の倍数としてください。しかし、この数値は小さく設定する必要があります。スレッドの数が多いほど、オペレーティング・システムおよびガベージ・コレクタの負荷が大きくなります。

queue

キュー内に保持できるリクエストの最大数。デフォルト値は0です。

queue値は、スレッドの最大数の2倍以上のサイズに設定してください。

keepAlive

新規リクエストの待機中に、スレッドをアライブ(アイドル)にしておく時間(ミリ秒単位)。タイムアウトに達するとスレッドは破棄されます。デフォルト値は、600000です。

スレッドを破棄しないようにするには、-1に設定します。

デフォルト値の600000ミリ秒(10分)は、値が-1ではない場合に設定できる最小値でもあります。

keepAlive0(ゼロ)に設定すると、アクティブなポーリングが原因でCPU使用率が高くなります。

stackSize

スレッド・プール・スタックのサイズ。デフォルト値は0です。

debug

値をtrueに設定すると、起動時にアプリケーション・サーバーのスレッド・プール情報がコンソールに出力されます。デフォルトはfalseです。debugfalseの場合、スレッド・プール情報は出力されません。


スレッド・プール構成の変更

次に示す方法でApplication Server Controlを使用するか、server.xmlファイルを編集することで、OC4Jインスタンスのスレッド・プール構成を変更できます。

  • Application Server Controlの「スレッド・プール構成」ページでスレッド・プールの属性値を変更。

  • Application Server ControlのシステムMBeanブラウザを使用してスレッド・プールMBeansの属性を変更。

    MBeanへのアクセスおよびMBeanを使用したOC4Jの管理の詳細は、「システムMBeanブラウザの使用方法」を参照してください。

  • server.xml<thread-pool>要素を追加して、rmi requestまたはrmi connectionスレッド・プール、あるいはその両方を構成。

    server.xmlの変更後に、OC4Jを再起動する必要があります。


注意:

スレッド・プールの構成またはデフォルト構成の変更は、エキスパート・モードのタスクです。変更の必要がない場合には、デフォルトのスレッド・プール構成を使用することをお薦めします。

Application Server Controlを使用したスレッド・プール構成の変更

Application Server Controlを使用してOC4Jインスタンスのスレッド・プール構成を変更するには、次のようにします。

  1. OC4Jホームページに移動して「管理」をクリックし、OC4Jの「管理」ページを表示します。このページには、OC4Jインスタンスに対して実行可能な様々な管理タスクがリストされた表が表示されています。

  2. 「管理」ページの「プロパティ」で、「スレッド・プール構成」を選択してOC4Jの「スレッド・プール構成」ページを表示します。

  3. このページに表示されている任意のスレッド・プールの1つ以上の属性値を変更します。

    属性値の詳細は、表10-2または「<thread-pool>」を参照してください。

  4. 「適用」をクリックします。

  5. 「クラスタ・トポロジ」ページまたはOC4JホームページからOC4Jインスタンスを再起動します。

「MBeansを使用したスレッド・プール構成の変更」で説明するように、Application Server ControlのMBeansを使用してスレッド・プールを構成することもできます。

MBeansを使用したスレッド・プール構成の変更

Application Server ControlのMBeansを使用してスレッド・プールの属性を変更するには、次のようにします。

  1. OC4Jホームページに移動して「管理」をクリックし、OC4Jの「管理」ページを表示します。このページには、OC4Jインスタンスに対して実行可能な様々な管理タスクがリストされた表が表示されています。

  2. 「管理」ページの「JMX」で、「システムMBeanブラウザ」を選択してOC4Jの「システムMBeanブラウザ」ページを表示します。このページには、OC4Jインスタンスによって公開されたシステムMBeanが表示されています。

  3. ページの左側にあるナビゲーション・ツリーを開いて、ThreadPoolの下にあるOC4Jインスタンスのスレッド・プールを選択します。

  4. 編集ボックスのあるスレッド・プールの任意の属性を変更します。

    属性値の詳細は、表10-2または「<thread-pool>」を参照してください。

  5. 「適用」をクリックします。

server.xmlへの<thread-pool>要素の追加

次の例では、<thread-pool>要素を使用して、server.xmlファイルにrmi requestスレッド・プールを構成します。

<thread-pool
   name="rmi request"
   min="50"
   max="50"
   queue="2560"
   keepAlive="-1"
   stackSize="0"
   debug="true"/>

この構成では、OC4JによりRMIリクエストを処理する別のスレッド・プールが作成されます。スレッド・プールの属性は次のようになります。

  • 最低のスレッド数は5

  • 最高のスレッド数は50

  • キューの最大リクエスト数は2560

  • keepAlive値は-1(タイムアウトなし)

  • stackSize値は0(JVMが決定)

  • debug属性の設定はtrue

次の例では、server.xmlに別のスレッド・プールを構成する<thread-pool>要素を示します。1つはRMIリクエストを、もう1つはRMI接続を、最後の1つはHTTPおよびAJPリクエストを処理します。

<thread-pool
   name="rmi request"
   min="50"
   max="50"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>

<thread-pool
   name="rmi connection"
   min="44"
   max="44"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>

<thread-pool
   name="http"
   min="40"
   max="40"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>

OC4Jインスタンスの起動時に、表10-2のデフォルトの属性値が設定された状態で、httpスレッド・プールがデフォルトで作成されます。その他のrmi-*スレッド・プールが存在しない場合、このスレッド・プールでは、HTTPおよびAJPリクエストだけでなく、RMIリクエストおよびRMI接続も処理されます。


注意:

server.xmlの変更後に、OC4Jを再起動する必要があります。

アプリケーションのカスタム・スレッド・プールの構成

server.xmlファイルに<custom-thread-pool>要素を追加することで、OC4Jインスタンスで使用する別のカスタム・スレッド・プールをアプリケーションに作成できます。その後、アプリケーションの*-web-site.xmlファイルにある<web-site>要素のcustom-thread-pool属性のスレッド・プールを参照することにより、アプリケーションがそのカスタム・スレッド・プールを使用できるようにできます。server-xmlファイルには、複数の<custom-thread-pool>要素を指定でき、それぞれのカスタム・スレッド・プールを使用するアプリケーションを2つ以上構成できます。

server.xmlでは、<custom-thread-pool>要素は<application-server>要素のサブ要素で、nameの値が制限されていないことを除き、<thread-pool>要素と同じ属性が指定されています。次に例を示します。

<custom-thread-pool name="mypool" min="3" />

name属性は必須で、その他すべての属性はオプションです。この要素の詳細は、「<custom-thread-pool>」を参照してください。

<thread-pool>要素の詳細は、「スレッド・プール構成の変更」および「<thread-pool>」を参照してください。

*-web-site.xmlファイルの詳細は、「Webサイト構成ファイル(*-web-site.xml)の概要」を参照してください。custom-thread-pool属性は、表B-25で説明されています。

次の例では、HTTP Webサイトのdefault-web-site.xmlファイルの<web-site>要素にcustom-thread-pool属性を追加して、デフォルト以外のスレッド・プールを使用するHTTP Webサイトを構成しています。

<web-site xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/web-site-10_0.xsd"
       protocol="http"
       port="8888"
       custom-thread-pool="mypool1"
       display-name="OC4J 10g (10.1.3) Default Web Site"
       schema-major-version="10"
       schema-minor-version="0"
     />

古いスレッド・プール形式からの変換

server.xml<global-thread-pool>および<work-manager-thread-pool>要素は、スレッド・プールが古い形式で構成されています。これらの要素は非推奨です。これらの要素の属性は、表B-7および表B-24で説明されています。

server.xmlファイルに<global-thread-pool>または<work-manager-thread-pool>要素が含まれている場合、OC4Jにより古い形式の要素がserver.xmlの新しい形式に更新されます。たとえば、server.xmlファイルに次の要素が含まれているとします。

<global-thread-pool
   min="60"
   max="60"
   queue="20000"
   keepAlive="-1" />

   <work-manager-thread-pool
   min="23"
   max="24"
   queue="5000"
   keepAlive="-1" />

OC4Jの起動後、server.xmlファイルには、<global-thread-pool>および<work-manager-thread-pool>要素ではなく、次の<thread-pool>要素が含まれています。

<thread-pool
   name="http"
   min="60"
   max="60"
   queue="20000"
   keepAlive="-1"
   stackSize="0" />

<thread-pool
   name="jca"
   min="23"
   max="24"
   queue="5000"
   keepAlive="-1" />

表10-3に、<global-thread-pool>および<work-manager-thread-pool>の属性が、OC4J 10g(10.1.3.1.0)で導入された新しいスレッド・プールにどのようにマップされているかを示します。

表10-3 古いスレッド・プール構成の新しいスレッド・プールへのマッピング

古いスレッド・プール属性 <thread-pool>のname属性の値 新しいスレッド・プール属性

<global-thread-pool>minmaxqueuekeepAliveおよびdebug属性

http

<thread-pool>minmaxqueuekeepAliveおよびdebug属性

<work-manager-thread-pool>minmaxqueuekeepAliveおよびdebug属性

jca

<thread-pool>minmaxqueuekeepAliveおよびdebug属性

<global-thread-pool>cx-mincx-maxcx-queuecx-keepAliveおよびcx-debug属性

rmi request

<thread-pool>minmaxqueuekeepAliveおよびdebug属性

<global-thread-pool>rmiRequest-minrmiRequest-maxrmiRequest-queuermiRequest-keepAliveおよびrmiRequest-debug属性

rmi connection

<thread-pool>minmaxqueuekeepAliveおよびdebug属性


たとえば、OC4Jにより、次の<global-thread-pool>要素から新しい<thread-pool>要素が生成されます。

<global-thread-pool
   keepAlive="-1"
   debug="false"
   cx-keepAlive="-1"
   cx-debug="false"
   rmiRequest-keepAlive="-1"
   rmiRequest-debug="false"
   min="40"
   max="40"
   queue="2560"
   cx-min="44"
   cx-max="44"
   cx-queue="2560"
   rmiRequest-min="50"
   rmiRequest-max="50"
   rmiRequest-queue="2560"/>

<thread-pool>要素の等価は次のとおりです。

<thread-pool
   name="rmi request"
   min="50"
   max="50"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>

<thread-pool
   name="rmi connection"
   min="44"
   max="44"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>

<thread-pool
   name="http"
   min="40"
   max="40"
   queue="2560"
   keepAlive="-1"
   stackSize="0"/>