WebOTX Manual V10.2 (第4版) 目次を表示 |
チューニングの方針を立てるためには現在使用中または使用予定のWebOTXのメモリ使用量や性能を正しく把握する必要があります。WebOTXやOSが提供する情報採取方法について説明します。
WebOTXが必要とするメモリ使用量はマニュアルの以下を参照してください。
WebOTXのエージェントプロセスが使用するJVMヒープサイズの確認については [ドメイン > Javaプロセスの監視・管理] を、JVMヒープサイズのモニタリングに関しては [モニタリング]を参照してください。
アプリケーションプロセスのメモリ使用量の確認については[ TPシステム > 統計情報(統合運用管理ツールでの表示) ] を参照してください。その他のプロセスについてはタスクマネージャ(Windowsの場合)またはtopコマンド(unixの場合)で確認してください。また、OS全体でのメモリ残量はタスクマネージャ(Windowsの場合)またはswapinfoコマンド(unixの場合)で確認できます。
なお、Oracle製JDKをご使用の場合はjconsoleを、HP-UXの場合はHPJmeterなどでヒープ使用量を確認することもできます。
実行時間の上限の設定を適切に行うために、運用アシスタントの実行時間の上限の適正値算出機能を利用してください。 詳細は [ TPモニタ > TPモニタの障害に対する機能 > 運用アシスタント ] の実行時間の上限の適正値算出を参照してください。
また、プロセス数やスレッド数を適切に設定するためにはキュー滞留数がひとつの目安になります。統合運用管理ツールでのキュー滞留数の確認方法については [モニタリング > モニタリング情報の採取 > モニタリングの利用例 > キューイング数のモニタリング] を参照してください。さらにquewrtコマンドで確認することもできます。 [ TPシステム > キュー滞留情報 ] を参照してください。
クライアント多重度、スレッド多重度がどこまで使われているのかを確認する方法を説明します。
使用中の接続クライアント数については [モニタリング > モニタリング情報の採取 > モニタリングの利用例 > 接続クライアント数のモニタリング] を参照してください。
WebOTXは稼動スレッド数などを記録するためにオペレーションジャーナルを採取しています。オペレーションジャーナルを編集することにより、稼動スレッド数を時間毎に調査することができます。 [TPシステム > 統計情報(オペレーションジャーナル) ] を参照してください。
WebOTXのプロセスとして動作するJava仮想マシン(Java VM)に対してチューニングを行うことで、使用メモリ、ガーベッジコレクション(GC)の頻度などを考慮した設計を行うことができます。
ここで設計対象となるのは、ユーザドメインのエージェントプロセス、プロセスグループです。それらに対し個々にヒープ領域、非ヒープ領域を考慮した設計を行う必要があります。
なおチューニングする値については [モニタリング > モニタリング情報の採取] や [ ドメイン > Javaプロセスの監視・管理 > 統計レポート出力]、 [ ドメイン > Javaプロセスの監視・管理 > GCログ出力] や、下記の例のようにgenerate-jvm-reportコマンドなどから 高負荷時にも耐えられるサイズを見積もる必要があります。
otxadmin > generate-jvm-report --type=memory **** Java 仮想マシン [アプリケーションサーバ インスタンス名: server] に対するメモリ (Perm Gen, Eden Space etc.) 情報 **** [メモリ情報] ヒープメモリ使用状況: 132,486 K / 192,256 K 全体(確定), 68 % 使用済み [ 65,536 K 初期, 506,816 K 最大] 非ヒープメモリ使用状況: 114,302 K / 125,056 K 全体(確定), 91 % 使用済み [ 2,496 K 初期, -1 K 最大] ファイナライズを待機しているオブジェクトの数(概算): 0 [メモリプール情報] Java 仮想マシンの実行時間: 0 時間 45 分 17 秒 Survivor Space 2,983 K / 6,592 K 全体(確定), 45 % 使用済み [ 2,176 K 初期, 17,472 K 最大] Eden Space 17,260 K / 53,120 K 全体(確定), 32 % 使用済み [ 17,472 K 初期, 139,776 K 最大] Compressed Class Space 8,680 K / 11,008 K 全体(確定), 78 % 使用済み [ 0 K 初期, 1,048,576 K 最大] Metaspace 75,575 K / 83,712 K 全体(確定), 90 % 使用済み [ 0 K 初期, -1 K 最大] Tenured Gen 112,472 K / 132,544 K 全体(確定), 84 % 使用済み [ 43,712 K 初期, 349,568 K 最大] Code Cache 30,098 K / 30,336 K 全体(確定), 99 % 使用済み [ 2,496 K 初期, 245,760 K 最大] :
また、設定を行った場合、ドメインの再起動、またはプロセスグループの再起動が必要となります。
ヒープ領域は使用するガベージコレクションの種別により、ヒープ領域に対する扱いが変わる点について注意する必要があります。JDK8を使用した場合は、既定では世代別GCが使用されます。
世代別GCは、New領域、Old領域を分けて管理し、それぞれの領域に対してデータの特性に考慮したアルゴリズムでもってガベージコレクションを実施します。
一方、G1GC(ガベージファースト・ガベージ・コレクタ)は、世代別GCと異なりヒープ領域が多数の均等サイズのリージョンと呼ばれる単位に分割されます。その上で、GC時に発生する一時停止時間を考慮した上で設計を実施する必要があります。世代別GCと同じようにNew領域、Old領域を分けて管理しますが、アルゴリズムによりそれらの値は自動的に変動します。アルゴリズムにより調整されるため、New領域やOld領域に対しての割合などを設定することはできません。
ヒープサイズについて使用するGCの種別に問わず、メモリに対しての見積もりを行う場合、New領域、Old領域をどの程度使用する可能性があるか、考慮した上でその2つを合計した値を最大ヒープサイズとして設定する必要があります。
アプリケーションを実際に動作させ、期待通りのスループットを得られるか確認を行う必要があります。アプリケーションを動作させ、GCの発生頻度を確認してください。New領域が少ないとOld領域に登録されやすく、Old領域に格納されたオブジェクトは、FullGCでのみ解放されます。
このFullGCが頻発するとアプリケーションの処理性能が劣化します。この点を考慮し、アプリケーションが期待したスループットを得ているか確認することが重要です。
Old領域は、常駐する可能性があるオブジェクトとNew領域から割り当てられるオブジェクトの2種類を考慮する必要があります。New領域に見積もった値と常駐する可能性があるオブジェクトの値を加算したものを設定する必要があります。
常駐する可能性があるオブジェクトのサイズを見積もるには、アプリケーションを配備した状態でGCログからFullGC発生直後のヒープサイズを確認する必要があります。何回かFullGCが発生したのを確認した後、安定して使用される値が最終的に常駐する可能性のあるオブジェクトのサイズとなります。
最大ヒープサイズ・最小ヒープサイズの設定以下の設定を行うことで、JVMオプションの一種である -Xmx及び-Xms(上図参照)を指定することと同様の意味を持ちます。変更後、ドメインの再起動が必要です。
[アプリケーションサーバ]-[JVM構成]-[最大Javaヒープサイズ] または [アプリケーションサーバ]-[JVM構成]-[初期Javaヒープサイズ]値を編集します。
最大ヒープサイズを変更する場合は下記のコマンドを実行します。
otxadmin> set server.java-config.max-heap-size=<サイズ>
<サイズ>には、-Xmxオプションと同様の指定方法でサイズを指定します。例えば、768Mバイトに指定する場合は"768m" とします。
初期Javaヒープサイズを変更する場合は下記のコマンドを実行します。
otxadmin> set server.java-config.heap-size=<サイズ>
以下の設定を行うことで、JVMオプションの一種である -Xmx及び-Xms(上図参照)を指定することと同様の意味を持ちます。変更後、プロセスグループの再起動が必要です。
[TPシステム]-[アプリケーショングループ]-<アプリケーショングループ名>-[プロセスグループグループ]-<プロセスグループ名>の[JavaVMオプション]-[最大ヒープサイズ] または [JavaVMオプション]-[初期ヒープサイズ] を編集します。
最大ヒープサイズを変更する場合は下記のコマンドを実行します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.maxHeapSize=<サイズ>
<サイズ>には、-Xmxオプションと同様の指定方法でサイズを指定します。例えば、768Mバイトに指定する場合は"768" とします。
初期Javaヒープサイズを変更する場合は下記のコマンドを実行します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.initialHeapSize=<サイズ>
なお、これらの設定値が大きすぎると、${INSTANCE_ROOT}/logs/server.logや${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/<プロセスグループ名>.<プロセスID>.log などに次のようなエラーが発生してドメインが起動しなくなる場合がありますので注意して下さい。また、実際にこれらのエラーが発生した場合には、OS側でそれ以上のサイズを確保できない状況であることを示していますので、指定した値よりも小さな値を設定するようにしてください。
世代別GCの場合に設定可能なJVMオプションは下記の通りです。
New領域の初期サイズを指定します。
運用管理コマンドの場合は、次のように指定します。
otxadmin> create-jvm-options "-XX\:NewSize=<サイズ>"
New領域の最大サイズを指定します。
運用管理コマンドの場合は、次のように指定します。
otxadmin> create-jvm-options "-XX\:MaxNewSize=<サイズ>"
<サイズ>の部分の指定方法はこれまでと同様です。
New領域/Young領域 の比(New : Old = 1 : x)を指定します。
運用管理コマンドの場合は、次のように指定します。
otxadmin> create-jvm-options "-XX\:NewRatio=<x>"
Eden領域/Survivor領域(1つ分)の比(Survivor : Eden = 1 : x)を指定します。
運用管理コマンドの場合は、次のように指定します。
otxadmin> create-jvm-options "-XX\:SurvivorRatio=<x>"
G1GCの場合はシステム要件に従い、JVMオプションを設定する必要があります。設定可能なJVMオプションとその詳細は、ガベージファースト・ガベージ・コレクタのチューニングを参照してください。
望ましい最大一時停止時間の目標値を設定します。デフォルト値は200ミリ秒です。
運用管理コマンドの場合は、次のように指定します。
otxadmin> create-jvm-options "-XX\:MaxGCPauseMillis=<ミリ秒>"
非ヒープ領域の構成は、ヒープ領域に対するガベージコレクションの種別による影響を受けません。非ヒープ領域は大きくはMetaspaceと呼ばれるクラス情報を格納する領域とそれ以外の領域に分かれており、いくつかの領域が調整対象となります。
MetaspaceMetaspace領域はクラスの情報が格納される領域となりますが、内部的にはクラスの情報を格納する領域(Class Type)と、それ以外の情報を格納する領域(Non-Class Type)に分かれています。Non-Class Typeの一つとして圧縮オブジェクトポインタ機能向けの領域(Compressed Class Space)が用意されています。
何れの領域も動作するアプリケーションの実装により変動するものとなるため、一概に値を設定することはできません。このため、アプリケーションを実際に動作させ、Metaspace領域及びCompressed Class Spaceの使用状況がどこで安定するのか、GCログや、generate-jvm-reportコマンドより確認する必要があります。
Metaspace領域の最大サイズは運用管理コマンドの場合、次のように指定します。
otxadmin> create-jvm-options "-XX\:MaxMetaspaceSize=<サイズ>"
Compressed Class Space領域の既定値は1GBであり、最大サイズを変更する場合、運用管理コマンドで次のように指定します。
otxadmin> create-jvm-options "-XX\:CompressedClassSpaceSize=<サイズ>"
[TPシステム]-[アプリケーショングループ]-<アプリケーショングループ名>-[プロセスグループグループ]-<プロセスグループ名>の[JavaVMオプション]-[その他の引数] にオプションを指定します。
Metaspace領域の最大サイズは、次のように指定します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.otherArguments="-XX\:MaxMetaspaceSize=<サイズ>"
Compressed Class Space領域の既定値は1GBであり、最大サイズを変更する場合、次のように指定します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.otherArguments="-XX\:CompressedClassSpaceSize=<サイズ>"
otherArguments に複数のオプションを指定する場合はスペース区切りで指定します。
アプリケーション実行時にJIT コンパイラ(Just-In-Time compiler)により生成されたネイティブコードは、Code Cacheというメモリ領域に配置されます。JDK8以降では、JITコンパイラの既定が階層型コンパイルとなっており、この階層型コンパイルは従来の手法よりCode Cache領域を使用する可能性があります。
Code Cacheサイズが枯渇した場合、JIT コンパイルが行われないため、性能が低下するおそれがあります。そのため、必要に応じてチューニングが必要です。Code Cacheサイズが不足した場合、${INSTANCE_ROOT}/logs/server.logや${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/<プロセスグループ名>.<プロセスID>.log などに以下のような警告が出力されます。
Code Cacheサイズのチューニングは下記のような方法でのチューニングが必要です。
コンパイルされているメソッドを出力するためのオプションは運用管理コマンドの場合、次のように指定します。
otxadmin> create-jvm-options "-XX\:+PrintCompilation"
Code Cache領域に対するサイズの変更は、運用管理コマンドの場合、次のように指定します。
otxadmin> create-jvm-options "-XX\:ReservedCodeCacheSize=<サイズ>"
[TPシステム]-[アプリケーショングループ]-<アプリケーショングループ名>-[プロセスグループグループ]-<プロセスグループ名>の[JavaVMオプション]-[その他の引数] にオプションを指定します。
コンパイルされているメソッドを出力するためのオプションは、次のように指定します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.otherArguments="-XX\:+PrintCompilation"
Code Cache領域に対するサイズの変更は、次のように指定します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.otherArguments="-XX\:ReservedCodeCacheSize=<サイズ>"
otherArguments に複数のオプションを指定する場合はスペース区切りで指定します。
JavaVM上でスレッドを生成した場合に、そのスレッド終了時まで一時的なデータを格納するために使用される領域です。既定値は使用するOSにより変わります。
通常は変更する必要がありませんが、あるメソッドを再帰的に延々と呼び出したり、非常に大きなサイズのローカル変数などを使用した場合に枯渇する恐れがあります。この場合java.lang.StackOverflowErrorがスローされます。このエラーがでる場合、スタックサイズの拡張を検討してください。
運用管理コマンドの場合、次のように指定します。
otxadmin> create-jvm-options -Xss<サイズ>
[TPシステム]-[アプリケーショングループ]-<アプリケーショングループ名>-[プロセスグループグループ]-<プロセスグループ名>の[JavaVMオプション]-[その他の引数] にオプションを指定します。
次のように指定します。
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.otherArguments="-Xss<サイズ>"
otherArguments に複数のオプションを指定する場合はスペース区切りで指定します。
調節はできません。この領域Java VMや、アプリケーションからJavaJava Native Interface(JNI)を使用し、CやC++などの他の言語を使用したときに使用される領域です。このためJNI等を使用しアプリケーションを実装している場合は、メモリの解放漏れなど発生しないよう注意してアプリケーションを実装する必要があります
ドメイン作成時の既定値では、既定の状態に従い、サービスの起動設定が行われます。
この際、運用上必要のないサービスを起動させない設定にすることによりメモリを削減することができます。サービスを停止する場合、下記の表に記載されている停止条件を確認し、停止条件に全て合致しているか確認を行った後、設定を変更してください。
統合運用管理ツールのドメイン毎に設定
[アプリケーションサーバ]-[内部ライフサイクルモジュール]-[(各サービス)]-[設定項目(Configurations)]-[起動の可否]
表示されていないサービスを表示させるためには、統合運用管理ツールの[システム]-[システム設定]-[画面表示]において、管理対象の表示レベルと属性の表示レベルを詳細レベルの情報を表示するように変更してください。
これらのサービスのうち、以下のサービスについては設定を変更しないで下さい。次回以降、ドメインが正常に起動できなくなる可能性があります。
ライフサイクル名 (英語名) |
既定状態 | 停止への変更 | 停止条件 | 備考 |
データベースコントローラ (DBControllerService) |
起動 | 可 | データベースコントローラを使用してデータベースの起動を行わない場合 |
テスト用サーバをインストールした場合、自動的にJavaDB(Derby)の自動起動設定を行います。 |
JavaEEUtilityLifecycle (JavaEEUtilityLifecycle) |
起動 | 不可 | ||
JMSプロバイダ (JmsProvider) |
起動 | 可 | 業務アプリケーションでJMSを使用していな場合 | |
CORBAサービス (CORBAService) |
起動 | 可 | Webコンテナサービスを使用しない場合 EJBを使用しない場合 JNDIサービスを使用しない場合 |
|
TPモニタマネージャサービス (TPMonitorManagerService) |
Editionにより異なる | 不可 | Expressインストール時には停止状態となっており、使用することができません。 | |
Transactionサービス (TransactionService) |
起動 | 不可 | ||
Webコンテナサービス (WebContainerService) |
起動 | 可 | Webアプリケーションを使用していない場合 運用管理コンソールを使用しない場合 |
このサービスを停止する場合、以下のコマンドを実行して運用管理コンソールを無効化する必要があります。 otxadmin> set system-applications.application.manager.enabled=false |
Webサーバサービス (WebServerService) |
インストール時の選択によって異なる | 可 | WebOTX Webサーバを使用していない場合 インストール時にアドバンスドモードを選択している場合 (別マシンのWebサーバを利用しない限り、必要となります。) |
サーバAPプロセスのプロセス数およびスレッド数を減らすことによりシステム全体のメモリを削減することが出来ます。 それ以上にメモリの節約を必要とする場合はコンポーネントの集約を行うことによりメモリを削減できます。ただし、障害の局所化か難しくなるなどのデメリットもあるので注意が必要です。
・ 統合運用管理ツールのプロセスグループの[プロセス制御]-[プロセス数]
・ 統合運用管理ツールのプロセスグループの[スレッド制御]-[スレッド数]
ディスクサイズを節約するためにはアプリケーションログのファイルサイズを制限したり、プロセス終了により退避されたアプリケーションログを削除することが有効です。 例えば削除可能なアプリケーションログについては [ログ > WebOTXのログ > Standard上のアプリケーションのログ出力 > サーバアプリケーショントレース採取] に記述しているsaveディレクトリがあります。 但し、ログの削除は障害発生時のプロセスの異常終了の原因究明に支障が出る可能性があるため注意が必要です。
最終更新日から30日(既定値)経ったsaveディレクトリ配下のファイルは、WebOTXシステムの起動後12時間間隔(運用アシスタント機能を使用している場合)、およびWebOTXシステムの停止時に自動的に削除されます。
・ 統合運用管理ツールのTPシステムの[システムパラメータ]-[トレースファイルの保存期間]
・ 統合運用管理ツールのプロセスグループの[トレース設定]-[システムトレースファイルの最大サイズ]
Standardで動作するTP モニタは、オペレーション毎にトランザクション等の実行時情報を管理する機能を備えています。あるモジュールが配備されると、TP モニタでは個々のオペレーションを識別するために番号を付与して、内部管理テーブルと状態情報との関連付けを行います。EJB モジュールの場合には、オペレーションがリモートインタフェースのメソッドに該当します。
メソッド識別情報の割り当て範囲を限定することにより、配備処理中に行われる識別情報の生成数を削減し、エージェントプロセスでのメモリ消費量の削減が可能です。
詳しくは、 [統合運用管理ツール(WebOTX Administrator) > アプリケーションの配備]、 [ アプリケーション配備< > 配備チューニング > EJBのメソッド識別情報の割り当て抑止 STD ] を参照してください。
また、EJBのメソッド識別情報の割り当てを抑止する以外にもオペレーションの統計情報を採取しないようにすることでエージェントプロセスでのメモリ消費量を節約できます。 ただし、この場合、運用アシスタントの機能を停止する必要があります。
・ 統合運用管理ツールのTPシステムの[オペレーション制御]-[オペレーションの統計情報を採取しない]
・ 統合運用管理ツールのTPシステムの[運用アシスタント]-[運用アシスタント機能を使用する]
サーバAPの性能チューニングについて説明します。
プロセスグループの適正な多重度を算出するための方法について説明します。
待ち行列理論を用いた計算により理論値を算出する方法について説明します。まずは以下の値について要件を整理します。
単位時間のトランザクション処理件数の逆数です。既存システムもしくはユーザ要件から算出してください。
サーバでのその処理の実行時間です。既存システムもしくはユーザ要件から算出してください。
クライアントからみた応答時間です(サービス時間+待ち時間)。既存システムもしくはユーザ要件から算出してください。
プロセスグループの多重度です。
これらを待ち行列理論で計算して必要な多重度Nを求めます。
N=RTs/(Ta(R-Ts))
例えば
Ta=0.1 (10件/秒)
Ts=0.2
R=0.5
とすると
N=0.5*0.2/(0.1*(0.5-0.2))=3.33...
となり要求を満たすには4多重必要ということになります。
本番運用を想定したプロトタイプを動作させ多重度を求める方法について説明します。プロトタイプを用いた測定のほうがより実運用に即した値を求めることが出来ます。
単体評価で算出
平均サービス時間:Tsを1多重で1つのクライアントからアクセスして時間を求めます。その他の値は既存システムもしくはユーザ要件から算出した値を用いて多重度を求めることが出来ます。
負荷評価で確認
実際に平均到着間隔:Taだけの負荷をかけて多重度を変えながらレスポンス時間を確認します。
運用アシスタントにより多重度の適正を診断することができます。多重度が多すぎる/少なすぎる場合は統合運用管理ツールなどを通して通知されます。
また運用アシスタントの多重度自動変更機能を利用することにより、システムの稼働状況に合わせて多重度を自動的に変更させることができます。
詳しくは [ TPシステム > 運用アシスタント
> 多重度の最適化支援 ] を参照してください。
応答時間が長い場合はその時のCPU使用率を確認してください。応答時間が長い場合はその時のCPU使用率を確認してください。
プロセスグループの「動作情報」タブの「プロセス情報」で確認できます。CPU情報はオペレーションジャーナルに記録され、統計的に解析することが可能です。
CPU使用率が高い場合はプロセス数やスレッド数を増やしても性能がよくなるとは限らないため、CPU使用率を減らすなどの対策が必要です。
多重度を増やす等の対処をおこなっても、他のプロセスが動作中でCPU時間がなかなか割り当てられない場合などはレスポンス時間が大きくなってしまいます。 プロセスの優先度を指定することにより、高優先度の処理は他のプロセスより優先されるため、CPU負荷が高い状況でも処理投入後即開始することが可能となります。
例えば、以下のように業務特性に合わせた最適な優先度設定が可能です。(※)
処理 |
優先度 |
緊急オンライン処理 |
高 |
通常オンライン処理 |
通常(未設定) |
バッチ処理 |
低 |
さらに、呼び出し処理単位の優先度設定(オペレーション優先度)と組合せて、よりきめ細かな設定が可能です。
プロセス優先度の設定はプロセスグループ単位で行います。 また、オペレーション優先度の設定はオペレーション単位で行います。
(※)優先度を維持するためには優先度を固定化する必要があります。またLinux OSでは優先度を固定することが出来ません。優先度を高く設定しても、実行を続けると優先度が落ちる場合があります。
性能測定を行なった結果、性能が想定していたより出ない場合、どの部分に問題があるのか特定する方法について説明します。
実際にどれくらいの実行時間で運用しているかを確認する方法について説明します。レスポンス時間の把握により問題のあるオペレーションを特定することが出来ます。
オペレーションの性能情報は[統計情報]-[ドメイン名]-[アプリケーション]-[アプリケーション名]-[モジュール名]-[インタフェース名]-[オペレーション名]を参照して下さい。
また、レスポンス時間(キュー待ち時間を含む応答時間)の他に、実行時間(キュー待ち時間を含まない処理時間)とCPU時間を確認することで性能ネック箇所を切り分けることができます。性能ネック箇所として疑わしいのは以下の箇所となります。
レスポンス時間 >> 実行時間 であれば多重度不足
実行時間 >> CPU時間 であればDBやネットワークなどのバックエンド問題
実行時間 ≒ CPU時間 であれば業務AP内でのループ
キュー滞留が発生しているかを確認する方法について説明します。キュー滞留が発生している場合、多重度が不足しておりレスポンス悪化になっている可能性が考えられます。
キュー滞留数の確認方法については [ TPシステム > キュー滞留情報 ] を参照ください。
オペレーション単位でオペレーションの処理状況(平均時間、最大時間、最小時間、呼び出し回数、平均CPU使用時間(ユーザモード/カーネルモード)、最大CPU使用時間(ユーザモード/カーネルモード)、最小CPU使用時間(ユーザモード/カーネルモード))を確認することができます。これにより問題のあるオペレーションを特定することが出来ます。
オペレーションジャーナルの確認方法については [ TPシステム > 統計情報(オペレーションジャーナル) ] を参照ください。
イベントジャーナルを採取してオペレーションの処理の流れを詳細に調べることができます。
イベントジャーナルについては [ TPシステム > 通信情報(イベントジャーナル) ] を参照ください。
Javaアプリケーションの場合プロファイリングを行なうことにより、より詳細に問題箇所を特定することが出来ます。
EJBアプリケーションやJNDIサーバとの通信で利用するクラスをキャッシュするように設定を変更することで、性能を向上させることができる場合があります。 Webアプリケーションのセッションレプリケーションでは、実装上、JNDIサーバとの通信が行われます。
otxadmin> set-orb-java-property PoolClasses true
クラスのキャッシュ機能を利用できる条件の詳細は、 [CORBA通信基盤(Object Broker) > 注意事項(Java) ] を参照してください。
高負荷になりレスポンスが悪化した場合などに考慮が必要なタイムアウト値や、プロセス起動・停止に必要なタイムアウト値などに関する設定、その他上限設定について説明します。
プロセスの起動操作、停止操作の完了を待ち合わせる時間を設定します。 タイムアウトした場合はエラーメッセージが表示されます。但し、プロセスの起動処理自体は実行され続けます。
設定項目 |
説明 |
既定値 |
設定値範囲 |
補足事項 |
1.システム起動タイムアウト |
システムの起動処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
2.システム停止タイムアウト |
システムの停止処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
3.アプリケーショングループ起動タイムアウト |
アプリケーショングループの起動処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
4.アプリケーショングループ停止タイムアウト |
アプリケーショングループの停止処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
5.プロセスグループ起動タイムアウト |
プロセスグループの起動処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
6.プロセスグループ停止タイムアウト |
プロセスグループの停止処理に関するタイムアウトの設定をします。 |
120秒 |
1以上の整数で秒単位 |
内部プロセスの電文応答待ち時間である70秒よりも長い値を指定してください |
設定方法
1. システム起動タイムアウトotxadmin> set tpsystem.startTimeOut=1202. システム停止タイムアウト
otxadmin> set tpsystem.stopTimeOut=1203. アプリケーショングループ起動タイムアウト
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.startTimeOut=1204. アプリケーショングループ停止タイムアウト
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.stopTimeOut=1205. プロセスグループ起動タイムアウト
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.startTimeOut=1206. プロセスグループ停止タイムアウト
otxadmin> set tpsystem.applicationGroups.<アプリケーショングループ名>processGroups.<プロセスグループ名>.stopTimeOut=120
アプリケーションプロセスの起動または停止に長い時間がかかる場合はタイムアウトを検出して異常終了することがあります。この場合、処理時間が妥当か検証し、妥当でないなら処理を見直し、妥当ならタイマ値を見直す必要があります。
設定項目 |
説明 |
既定値 |
設定値範囲 |
1. スレッド初期化時間 |
スレッド初期化にかかる時間のタイムアウト値を設定します。 |
600秒 |
1-2147483647で秒単位 |
2. プロセスのストール監視間隔 |
スレッド初期化前及びスレッド終了後にかかる時間のタイムアウト値を設定します。 |
600秒 |
1以上の整数で秒単位 |
スレッド初期化時間のタイムアウト値は以下の場所で時間のかかる処理を行っている場合に考慮が必要です。
コンストラクタ・デストラクタ(アパートメントの場合)
常駐オブジェクトのコンストラクタ・デストラクタ
設定を反映させるためにはアプリケーショングループを再起動してください。
また、プロセスのストール監視間隔のタイムアウト値は以下の場所で時間のかかる処理を行っている場合に考慮が必要です。
コンストラクタ・デストラクタ(ステートレスフリーの場合)
コンポーネント初期化インタフェース
実装情報の定義関数
プロセス起動および終了時のコールバック関数
WO_ObjectListener (JavaAPでフリースレッドモデルの場合のみ)
BindingHooks (ステートレスフリーで名前サーバへの登録方法が一時的の場合のみ)
設定を反映させるためにはTPシステムを再起動してください。
スレッド初期化時間
統合運用管理ツールのプロセスグループの[スレッド制御]-[スレッドの初期化時間の上限]
プロセスのストール監視間隔
統合運用管理ツールのTPシステムの[上限設定]-[プロセスのストール監視間隔]
クライアント側で設定する場合
クライアント側でオペレーション実行要求を出してからその応答をもらうまでのタイムアウト値を設定します。 このタイムアウト値を設定することで、クライアントが無応答となることを抑止します。このタイムアウト値はサーバでの実行時間のほかに通信に要する時間およびキュー待ち時間を考慮して設定します。
設定項目 |
説明 |
既定値 |
設定値範囲 |
1. Javaクライアントからのオペレーション呼び出しタイムアウト時間 |
EJB、JNDIなどRMI-IIOP通信を使用する呼び出しのタイムアウト時間です。 |
30秒 |
0以上 ※0を指定した場合は無制限 |
2. Javaクライアントでの無通信監視タイムアウト時間 |
クライアント側で一定時間送受信要求のないコネクションをクローズするまでのタイムアウト時間です。 |
無制限 |
0以上 ※0を指定した場合は無制限 |
3. オペレーション呼び出しのタイムアウト時間 |
CORBA通信を使用する呼び出しのタイムアウト時間です。 |
30秒 |
0以上 ※0を指定した場合は無制限 |
4. コネクションラウンドロビンでのオペレーション呼び出しのタイムアウト時間 |
多重化オブジェクトによるコネクションラウンドロビン機能を利用する場合に有効になります。個々のサーバへのオペレーション呼び出しのタイムアウト時間です。 |
オペレーション呼び出しのタイムアウト時間の値 |
0以上 ※0を指定した場合は無制限 |
1. Javaクライアントからのオペレーション呼び出しタイムアウト時間
Javaコマンドラインで指定する場合
以下の形式でシステムプロパティを指定
-Djp.co.nec.orb.RequestTimeout=<タイムアウト時間(秒)>
J2EEサーバ(Webコンテナ、JNDIサーバ)に指定する場合
統合運用管理ツールのserver.java-configの「JVMオプション」に以下の形式でシステムプロパティを追加
-Djp.co.nec.orb.RequestTimeout=<タイムアウト時間(秒)>
プロセスグループ(EJBコンテナ)に指定する場合:
統合運用管理ツールのtpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>の「Javaシステムプロパティ」で行の追加を実行し、 1列に「jp.co.nec.orb.RequestTimeout」、2列に秒数を指定
2. Javaクライアントでの無通信監視タイムアウト時間
Javaコマンドラインで指定する場合
以下の形式でシステムプロパティを指定
-Djp.co.nec.orb.ClientAutoTimeout=<タイムアウト時間(秒)>
J2EEサーバ(Webコンテナ、JNDIサーバ)に指定する場合
統合運用管理ツールのserver.java-configの「JVMオプション」に以下の形式でシステムプロパティを追加
-Djp.co.nec.orb.ClientAutoTimeout=<タイムアウト時間(秒)>
プロセスグループ(EJBコンテナ)に指定する場合
統合運用管理ツールのtpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>の「Javaシステムプロパティ」で行の追加を実行し、 1列に「jp.co.nec.orb.ClientAutoTimeout」、2列に秒数を指定
3. オペレーション呼び出しのタイムアウト時間
統合運用管理ツールで指定する場合
server.orb-configの「共通」タブの「リクエスト呼び出しのタイムアウト時間」に秒数を指定
コマンドで指定する場合
otxadmin> set server.orb-config.RequestTimeout=<設定値>
4. コネクションラウンドロビンでのオペレーション呼び出しのタイムアウト時間
統合運用管理ツールで指定する場合
server.orb-config.の「Cpp」タブの「多重化使用時の最大待ち時間」に秒数を指定
コマンドで指定する場合
otxadmin> set server.orb-config.ConnectionRoundRobinTimeout=<設定値>
サーバ側で設定する場合(キュー滞留時間監視タイマ)
オペレーション実行要求をサーバが受け付けてからその応答を返すまでのタイムアウト値を設定します(既定値:上限なし)。このタイムアウト値を設定することで、 クライアントが無応答となることを抑止します。このタイムアウト値はサーバでの実行時間のほかに通信に要する時間およびキュー待ち時間を考慮して設定します。 各オペレーションの実行時間(予測値)の最大値よりは大きな値を設定する必要があります。設定を反映させるためにはアプリケーショングループの再起動が必要です。
なお、キュー滞留時間監視タイマを超過した場合、クライアントにエラーは返りますがサーバAPは処理を継続したままなのでサーバAPの無応答状態が改善するわけではありません。
統合運用管理ツールのプロセスグループの[上限設定]-[キュー滞留時間監視タイマ]
サーバ側のオペレーション実行開始から実行完了までのタイムアウト値を設定します(既定値:600秒)。この値はサーバでの実行時間のみ考慮して設定します(キュー待ち時間は含みません)。
オペレーションの実行をタイムアウトさせる場合は、オペレーションの[実行時間の上限超過時にプロセスを強制停止する]設定にチェックを入れてください。タイムアウト値はオペレーションの[実行時間の上限]で設定できます。いずれもTPシステムに設定した場合は全てのオペレーションに一括設定されます。
なお、実行時間タイムアウト値は運用アシスタントの実行時間の上限の適正値算出機能により推奨値が自動設定されている場合があります。[実行時間の上限超過時にプロセスを強制停止する]にチェックを入れる場合は、実行時間タイムアウト値の設定値が問題ないかを検討して下さい。
これらの設定を変更した場合、予期しない時間で強制停止されることを防ぐために、運用アシスタントの適正値算出機能を停止させます。運用アシスタントに実行時間の上限を自動設定させたい場合は、
再度設定を行ってください。実行時間の上限における適正値算出機能の詳細は
[TPモニタ > TPモニタの障害に対する機能 >
運用アシスタント ]
の実行時間の上限の適正値算出を参照してください。
なお、実行時間タイムアウト値を超過した場合、プロセスは終了します。プロセスを再起動させるためには再起動回数(統合運用管理ツールのTPシステムの[上限設定]-[プロセス障害時の再起動回数])を2以上にする必要があります。推奨はデフォルトの5です。プロセス障害時の再起動回数が1でプロセスが終了した場合、プロセスは終了したままで再起動しませんので注意してください。
統合運用管理ツールの以下の設定を変更します。
オペレーションの[オペレーション制御]-[実行時間の上限]
オペレーションの[オペレーション制御]-[実行時間の上限超過時にプロセスを強制停止する]
TPシステム利用時、サーバとクライアントの間、または、WebサーバとAPサーバの間の無通信状態を監視します(既定値:しない)。本タイマ値以上無通信状態(具体的には要求も応答も流れない状態)が続いた場合はコネクションを切断します。設定を反映させるためにはTPシステムの再起動が必要です。
統合運用管理ツールの[IIOPリスナ]-[クライアント制御]-[クライアントとの無通信監視を行う]及び[クライアントとの無通信監視間隔]
または
統合運用管理ツールの[AJPリスナ]-[クライアント制御]-[Webサーバとの無通信監視を行う]及び[Webサーバとの無通信監視間隔]
サーバアプリケーションすべてのスレッドがクライアントからのリクエスト処理を行なっている場合、新たな要求はキューイングされ実行待ちとなります。既定値ではメモリの許す限りキューイングされてしまい、クライアントから見るとキュー数が増えれば増えるほど無応答時間が長くなります。ある程度以上のキューイングを抑制することによりクライアントのレスポンスを保証することが出来ます。
(平均待ち時間)=(平均サービス時間)*{(キュー数)+1}
統合運用管理ツールでプロセスグループ毎に設定できます。
プロセスグループの[キューの最大数]-[リクエストキューのサイズ]
IIOPリスナを使ってrichクライアントを動作させる場合、またはAJPリスナを使ってthinクライアントを動作させる場合、想定以上の接続を受けるとサーバ側資源(主にメモリとファイルディスクリプタ)を余分に使います。 接続数に上限を設けることにより設定以上のクライアントから要求を受け付けなくすることが出来ます。ただし接続クライアント数をぎりぎりに設定してしまうとゴーストセッションが残っている場合、 接続できなくなる可能性がありますので、ゴーストセッションの対策をとった上である程度の余裕を持たせてください。 ゴーストセッションの対策については [ 障害解析 > ログ情報から > イベントログ・syslog > クライアント接続数オーバへの対応] を参照してください。
統合運用管理ツールの[TPシステム]-[IIOPリスナ]-[上限設定]-[最大同時接続クライアント数]
統合運用管理ツールの[TPシステム]-[AJPリスナ]-[上限設定]-[最大同時リクエスト処理数]
thinクライアント構成の場合、Webサーバから1つのセッションを通して多重にリクエスト要求が発行されます。 クライアント数やトランザクション処理件数に応じた1セッションあたりの同時実行数を設ける必要があります。 本設定は、IIOPリスナ利用時にのみ有効です。
統合運用管理ツールの[TPシステム]-[IIOPリスナ]-[クライアント制御]-[1セッションあたりのリクエスト多重度]
サーバ側の送受信の上限は設定の有無にかかわらず99,999,998バイト(約100M)となります。
また、クライアントがVBまたはC++の場合、電文の受信最大サイズは8,388,608バイト(8M)となります。クライアント側での受信電文長を10Mまで増やしたい場合はクライアントマシンのレジストリ変更が必要です。
レジストリの名前:HKEY_LOCAL_MACHINE\SOFTWARE\NEC\ObjectSpinner\1\MaxMessageSize
属性:文字列属性(REG_SZ)
値 :0〜4294967295(単位:バイト)
意味:受信可能とする最大サイズを指定します。
補足:送信には関係ありません。
クライアントから瞬時に大量の接続要求が来た場合、WebOTX側での接続処理が間に合わずクライアントへエラーが返ってしまうことがあります。このような場合には本パラメータの値を大きくすることにより、接続要求をサーバ側で保留することができます。
統合運用管理ツールの[TPシステム]-[IIOPリスナ]-[クライアント制御]-[接続要求最大保留数]
統合運用管理ツールの[TPシステム]-[AJPリスナ]-[クライアント制御]-[接続要求最大保留数]
クライアントからのCORBAリクエストはメモリプールとして事前に確保した共有メモリ上に受信されます。また、サーバからのCORBA応答もメモリプールに展開された後に送信を行います。これらの領域は、クライアントへの送信が完了した時点で解放されます。
このような管理方式にすることで、外因によらず迅速で確実なバッファ取得ができることになりますが、一方で、このサイズを適当な値に設定する必要があります。
バッファ使用区間はCORBAリクエストの受信から送信までですので、サーバ側でのオペレーションの同時実行数が上がるほどバッファが必要になります(キューイングされているものも含む)。また、リクエストや応答のメッセージサイズが大きいほどバッファが必要になります。
なお、本用途に使用されるバッファ領域はメモリプールサイズ×0.9となります。
必要なメモリプールサイズの最大値は次のとおり計算できます。
(メモリプールサイズの最大値) = (メモリブロック数) * (ブロックサイズ)
(メモリブロック数) = {もっとも大きい電文のサイズ/(ブロックサイズ) + 1} *
(WebOTXで同時に処理するオペレーション数)
(ブロックサイズ) = 4704 bytes
統合運用管理ツールの[TPシステム]-[システムパラメータ/動的情報]-[送受信用共有メモリサイズ]
プロセスグループのプロセスが異常終了したとき、自動再起動させる回数を1から55000の範囲の整数で設定します。 1を設定すると、プロセスは再起動しません。全てのプロセスグループに対してこの設定は有効となります。
プロセスグループ単位で、プロセスが自動で再起動する回数は次の計算式の通りです。
(プロセス再起動回数) = (プロセス多重度) × { (プロセス障害時の再起動回数) − 1 }
例えば、(プロセス多重度)が4で(プロセス障害時の再起動回数)を5に設定している場合、 プロセスグループ単位でプロセスは計16回再起動します。 4プロセスの内で特定のプロセスのみが異常終了している場合でも、16回まで自動で再起動します。
なお、[TPシステム]-[上限設定]-[プロセスを正常と仮定する間隔]で設定されている時間内にプロセスの異常終了が起こらなかった場合、プロセス再起動回数はクリアされ、初期値にリセットされます。
統合運用管理ツールの[TPシステム]-[上限設定]-[プロセス障害時の再起動回数]
統合運用管理ツールのTPシステム(システムパラメータ)で設定可能なパラメータで、 設定値に対するメモリ使用量の計算式は次のとおりです。
統合運用管理ツールの以下の設定を変更します。
[TPシステム]-[システムパラメータ/静的情報]
[TPシステム]-[システムパラメータ/動的情報]