BDCEPのチューニングについて説明します。
1つのCEPエンジンの内部では、2つのJava VM(以降JVM)が動作します。1つは入力アダプターと高速フィルターの処理を行い、もう1つは複合イベント処理と出力アダプターの処理を行います。
リソースログの分析によりJVMのヒープメモリ量の過不足が判明した場合、CEPエンジンのJVMオプションのチューニングを行います。これにより、CEPエンジンにおけるガベージコレクション発生による処理性能低下などの問題を回避できます。
チューニング可能なJVMオプションは以下の通りです。
設定可能な項目 | CEPエンジン作成時の初期値 |
---|---|
メモリ割り当てプールの最大値 | 2048m (*1) |
メモリ割り当てプールの初期値 | 512m (*1) |
Permanent世代領域の最大値 | 192m (*1) |
(*1) mはMBをあらわす。2048m = 2048MB
JVMオプションのチューニングの流れは以下のようになります。
現在のJVMオプションの設定確認
リソースログによるヒープメモリ使用量の把握
必要なヒープメモリサイズの計算(問題なければ終了)
JVMオプションの設定変更
CEPエンジンの(再)起動(変更後の設定を反映)
1に戻る
現在のJVMオプションの設定確認
CEPエンジンのJVMオプションの設定内容を確認するには cepgetjvmopt コマンドを使用します。
cepgetjvmoptコマンドの詳細は「8.6 cepgetjvmopt」を参照してください。
このコマンドは一般ユーザーで実行できます。
例
cepgetjvmoptコマンドの実行例
CEPエンジン CepEngine の複合イベント処理のJVMオプションを確認する例
$ cepgetjvmopt cep -e CepEngine<ENTER>
xmxSize :5120m
xmsSize :256m
maxPermSize :96m
Command cepgetjvmopt executed successfully.
リソースログによるヒープメモリ使用量の把握
リソースログを分析して、CEPエンジンのJava VMのヒープメモリ使用量の最大値について確認します。
具体的には、new世代領域、old世代領域、permanent世代領域のそれぞれについて確認します。
リソースログが出力する項目の中で、JVMのヒープメモリに関する項目は以下の通りです。
高速フィルターのリソースログ、複合イベント処理のリソースログの両者とも共通です。
リソースログの出力形式については、「6.1.5.4 CEPエンジンのリソース利用状況の確認」を参照してください。
ヒープメモリに関する項目 | 説明 |
---|---|
jheap new used | 高速フィルターのJava VMのヒープメモリ使用量(new世代領域)です。 |
jheap new free | 高速フィルターのJava VMのヒープメモリ空き容量(new世代領域)です。 |
jheap new total | 高速フィルターのJava VMのヒープメモリ領域長(new世代領域)です。 |
jheap old used | 高速フィルターのJava VMのヒープメモリ使用量(old世代領域)です。 |
jheap old free | 高速フィルターのJava VMのヒープメモリ空き容量(old世代領域)です。 |
jheap old total | 高速フィルターのJava VMのヒープメモリ領域長(old世代領域)です。 |
jheap new + old total | 高速フィルターのJava VMのヒープメモリ領域長(new世代領域+old世代領域)です。 |
jheap perm used | 高速フィルターのJava VMのヒープメモリ使用量(permanent世代領域)です。 |
jheap perm free | 高速フィルターのJava VMのヒープメモリ空き容量(permanent世代領域)です。 |
jheap perm total | 高速フィルターのJava VMのヒープメモリ領域長(permanent世代領域)です。 |
必要なヒープメモリサイズの計算
リソースログを分析し、new世代領域、old世代領域、permanent世代領域のそれぞれの最大値を確認したら、必要なヒープメモリサイズを以下のように計算します。
必要なヒープメモリサイズが設定値以下ならチューニング作業は終了です。
(new世代領域の最大値 + old世代領域の最大値 + permanent世代領域の最大値) × 1.2
1.2は安全係数です。季節や時間帯によってヒープメモリ使用量が大きく変動するようなら、より大きな安全係数を設定してください。
permanent世代領域の最大値 × 1.2
1.2は安全係数です。季節や時間帯によってヒープメモリ使用量が大きく変動するようなら、より大きな安全係数を設定してください。
JVMオプションの設定変更
CEPエンジンのJVMオプションの設定を変更するには cepsetjvmopt コマンドを使用します。
cepsetjvmoptコマンドの詳細は「8.8 cepsetjvmopt」を参照してください。
このコマンドはスーパーユーザーで実行します。
例
cepsetjvmoptコマンドの実行例
CEPエンジン CepEngine の複合イベント処理に対し、JVMオプションのメモリ割り当てプールの最大値を512MBに変更する場合の例です。メモリ割り当てプールの初期値とPermanent世代領域の最大値には、それぞれ対応するデフォルト値が設定されます。
# cepsetjvmopt cep -xmx 512m -e CepEngine <ENTER>
Command cepsetjvmopt executed successfully.
なお、“m”は“MB”を意味します。
注意
cepsetjvmoptのオプション(-xmx、-xms、-xxmp)を省略した場合、各オプションに対応するデフォルト値が設定されます。
CEPエンジンの(再)起動
設定後のJVMオプションの内容をCEPエンジンに反映させるため、対象のCEPエンジンを(再)起動します。
対象のCEPエンジンが起動中の場合は、一旦停止させる必要があります。CEPエンジンの停止については 「6.1.6 CEPエンジンの停止」を参照してください。
CEPエンジンの起動については、「6.1.4 CEPエンジンの起動」を参照してください。
作業は一般ユーザーで実行できます。
例
CEPエンジンの再起動
起動中のCEPエンジン CepEngine を再起動する例です
$ cepstopeng -e CepEngine <ENTER>
Command cepstopeng executed successfully.
$ cepstarteng -e CepEngine <ENTER>
Command cepstarteng executed successfully.
1つのCEPエンジンを運用するために必要なファイルディスクリプタ数は、Socket通信の同時接続数や、ルール定義のフィルタールールに記述されている高速フィルター文の数に応じて変化します。
ファイルディスクリプタ不足で異常が発生した場合やリソースログの分析により、ファイルディスクリプタの過不足が判明した場合は、ファイルディスクリプタ数の上限値の設定が必要です。
必要なファイルディスクリプタ数は、各CEPエンジンごとに、以下の計算式で算出します。
必要となるファイルディスクリプタ数 = A + (8 × B) + 371
項目 | 説明 | 必要数 |
---|---|---|
A | Socketの同時接続数です。 | 想定する同時接続数の最大値を使用してください。 現在の同時接続数、または過去の同時接続数の変化を確認するには、CEPエンジンの動作状態、またはリソースログが出力するSocket通信の同時接続数を参照してください。 参照方法については「8.4 cepdispeng」、または「6.1.5.4 CEPエンジンのリソース利用状況の確認」を参照してください。 |
B | フィルタールールに記述したIF-THEN文の合計数です。 | 現在のIF-THEN文の数を確認するには、CEPエンジンの動作状態、またはリソースログが出力する高速フィルター文の数を参照してください。 参照方法については「8.4 cepdispeng」、または「6.1.5.4 CEPエンジンのリソース利用状況の確認」を参照してください。 |
注意
ファイルディスクリプタが枯渇すると、運用継続が不可能になる可能性があります。Aの同時接続数は、余裕をもたせた値にしてください。
計算した値と、エンジン実行ユーザーが利用できるファイルディスクリプタ数の上限値を比較してください。
複数のCEPエンジンがある場合は、各CEPエンジンごとの計算結果から最大のものと比較してください。
エンジン実行ユーザーが利用できるファイルディスクリプタ数の上限値は、次のコマンドで確認できます。スーパーユーザーで実行してください。
# /bin/su -c 'ulimit -n' エンジン実行ユーザー名 <ENTER>
計算した値の方が大きい場合、/etc/security/limits.confファイルに計算した値を設定します。
変更後はOSを再起動してください。変更方法の詳細については、OSのドキュメントを参照してください。
例
/etc/security/limits.confの設定例
エンジン実行ユーザー「isbdcep」が利用できるファイルディスクリプタ数の上限値を、デフォルト値の「1024」から「2048」に変更する例です。
isbdcep soft nofile 2048
isbdcep hard nofile 2048
BDCEPではイベント送信アプリケーションとの入出力情報、およびイベント送信アプリケーションからのリクエストに対する受信処理状態をトレースログとして出力しています。
トレースログを出力しないように設定することで、HTTPアダプター、SOAPアダプター使用時のイベント処理性能を向上できます。
注意
トレースログを出力しない設定にすることで、トラブル発生時の原因究明に時間がかかることがあります。性能に問題がない場合は、トレースログを出力することを推奨します。
トレースログの出力を抑止(または再開)する流れは以下のようになります。本作業はスーパーユーザーで実施してください。
(1) イベント送信アプリケーションとの入出力情報のログ出力抑止(再開)
(1) イベント送信アプリケーションとの入出力情報のログ出力抑止(再開)
/var/opt/FJSVihs/servers/FJapache/conf/httpd.confを編集し、IHSTraceLogの設定値を“off”にします。
例
/var/opt/FJSVihs/servers/FJapache/conf/httpd.confの設定例
変更前
IHSTraceLog "|/opt/FJSVihs/bin/ihsrlog -s logs/tracelog 2 5"
変更後
#IHSTraceLog "|/opt/FJSVihs/bin/ihsrlog -s logs/tracelog 2 5"
IHSTraceLog off
ログ出力を再開する場合は、同様にhttpd.confを編集し、変更前の内容に戻します。
(2) イベント送信アプリケーションからのリクエストに対する受信処理状態のログ出力抑止(再開)
イベント送信アプリケーションからのリクエストに対する内部の受信処理状態のログ出力を抑止するため、以下のコマンドを実行します。
見やすさのため、途中の「\」で改行しています。実際には途中の「\」は入力せず、次の行の内容を続けて一行で入力します。
# /opt/FJSVisjee/bin/asadmin set \
CEPエンジン名_flt-config.http-service.property.ISJEELogHttpTraceEnable=false <ENTER>
ログ出力を再開する場合は、以下の通り実行します。
# /opt/FJSVisjee/bin/asadmin set \
CEPエンジン名_flt-config.http-service.property.ISJEELogHttpTraceEnable=true <ENTER>
例
コマンドの実行例
CEPエンジン名が「CepEngine」の場合にログ出力を抑止する場合の実行例です。
見やすさのため、途中の「\」で改行しています。実際には途中の「\」は入力せず、次の行の内容を続けて一行で入力します。
# /opt/FJSVisjee/bin/asadmin set \
CepEngine_flt-config.http-service.property.ISJEELogHttpTraceEnable=false <ENTER>
CepEngine_flt-config.http-service.property.ISJEELogHttpTraceEnable=false
(3) CEPサービスの再起動
CEPサービスを再起動し、ログ出力を抑止(再開)する設定を反映させます。
手順としては、cepstopservコマンド、cepstartservコマンドの順で実行します。
例
CEPサービス再起動の実行例
# cepstopserv <ENTER>
(省略)
# cepstartserv <ENTER>
(省略)
(4) CEPエンジンの起動
cepstartengコマンドを実行し、CEPエンジンを起動します。
例
cepstartengコマンドの実行例
# cepstarteng <ENTER>
Command cepstarteng executed successfull