フローサービスのチューニング
フローサービスの各種設定について確認するチューニングポイントについて説明します。実施する前にフローサービスのアーキテクチャについて理解し、実行環境を検証する必要があります。フローサービスのアーキテクチャについては、「はじめに」>「フロー機能」>「フローサービスのプロセス構成」と「はじめに」>「詳細なトピック」>「フローサービスのアーキテクチャ」を参照してください。
フローサービスの中核をなすFlowServiceは、外部からのイベントを受信するための各種「リスナー」とフローを実行するランタイム環境である「フローエンジン」で構成されています。FlowServiceの処理状況をモニターツールで確認し、チューニングポイントを確認します。モニターツールについては、「稼動監視」>「モニターツール」を参照してください。
FlowServiceの処理モデルを以下に示します。
フローエンジン
フローエンジンでは、各リスナーから送られてくるフロー開始リクエストをアクセプターが受理し、即座にキューに登録します。そこから、プールされているスレッド(Worker)のうち空き状態になっているものがキューの先頭エントリーを取り出して処理を開始します。スレッドはリクエストされたフロー(サブフロー、エラー処理フロー、次に実行するフローを含むメインフロー全体)の開始から終了までの処理を一貫して行い、処理が終わると空き状態になります。
フローエンジンの設定を変更するには、管理コンソールの「設定」-「サービス」-「フロー」の「フローエンジン」から行います。
チューニングに関連する主な項目は、以下のとおりです。各項目の詳細は、管理コンソールのヘルプを参照してください。
- スレッドプールサイズ
- スレッド最大サイズ
- リクエストキューサイズ
- リクエストキュー警告サイズ
- コネクションプールサイズ
以下の点から、チューニングを実施します。
- システム要件とハードウェアスペックに合わせて決定します。
- Timerコンポーネントでフローを実行している場合はその数もスレッド数調整の考慮に入れます。
- フローエンジンの設定値は各リスナーからの同時総リクエスト数を考慮して最適な値を設定します。
- 同時に走るスレッドが多い時間帯と少ない時間帯があるようなシステムでは、スレッドプールサイズとスレッド最大サイズは同値のほうがレスポンスは早くなる場合があります。(新規にスレッドを起こす場合には逐次CPUコストがかかるため。また、フローサービスの仕組み上、1度に起動するスレッド数が決まっているため。)
- コネクションプールサイズはスレッドサイズに合わせて適切に設定します。
各種リスナー
フローの実行設定がURL起動の場合、フロー開始リクエストはHTTPリスナーまたはHTTPSリスナーが受理します。スケジュール起動、flow-ctrlコマンド、FlowExecuteClientクラス(Java)からの起動の場合、フロー開始リクエストはフローデザイナーリスナー(Admin-HTTPリスナー)が受理します。
これらのリスナーの設定変更は、管理コンソールの「設定」-「サービス」-「フロー」から対応するリスナーの設定画面から行うことができます。
チューニングに関連する主な項目は、以下のとおりです。各項目の詳細は、管理コンソールのヘルプを参照してください。
- スレッドプールサイズ
- スレッド最大サイズ
- リクエストキューサイズ
- リクエストキュー警告サイズ
以下の点から、チューニングを実施します。
- HTTPリスナーの設定値はHTTPのリクエスト数に応じて適切に設定します。URL起動からのリクエストの多重度が1増えるごとに、少なくともHTTPリスナーのスレッド最大サイズとフローエンジンのスレッド最大サイズを1ずつ増やします。
- HTTPリスナーは一般的にはアクティブな場合でもアイドリングしている(=CPU消費が少ない)時間が相対的に長いため、通常時のプールサイズと最大時のプールサイズの差を縮めておくことが有効です。
- 同時に走るスレッドが多い時間帯と少ない時間帯があるようなシステムでは、スレッドプールサイズとスレッド最大サイズは同値のほうがレスポンスは早くなる場合があります。(新規にスレッドを起こす場合には逐次CPUコストがかかるため。また、フローサービスの仕組み上、1度に起動するスレッド数が決まっているため。)
その他
管理コンソールの「設定」-「サービス」-「フロー」で、チューニングに関連するその他の項目について説明します。各項目の詳細は、管理コンソールのヘルプを参照してください。
起動
管理コンソールの「設定」-「サービス」-「フロー」の「起動」から、「最大メモリサイズ」を確認します。
以下の点から、チューニングを実施します。
- 最大メモリサイズを適切に設定します。
- 初期メモリサイズを最大メモリサイズと同値に設定しておきます。メモリ領域の拡張が処理中に行われなくなるため、レスポンスが改善される場合があります。