概要
Pythonサービス製品上でデータ関数を実行する際には、各データ関数がそれぞれのエンジン(エンジンプロセス、java.exe)によって処理されます。
この資料はPythonサービス内で利用できるエンジンの数の上限について情報をまとめます。
動作検証環境
- Spotfire Server 12.0 LTS
- Pythonサービス 1.12 LTS
エンジン数の上限
エンジン数の上限は以下の2つの設定項目(参考資料)によって制御されています。
1.同時に実行できるセッションの数の上限
engine.session.max: 5
各セッションが単独のエンジンによって処理されます(セッション数=エンジン数)。
デフォルト値:サーバの論理プロセッサ数 - 1
設定範囲:-1(デフォルト値を使用)、または1以上の数値
Pythonサービス上で同時に実行できるデータ関数の数は上記の設定項目によって制御されています。
2.予め起動しておくエンジンの数の上限(待機中のエンジンの数の上限)
engine.queue.size: 5
デフォルト値:サーバの論理プロセッサ数 / 4で算出した最小値が1で最大値が10の数値
設定範囲:-1(デフォルト値を使用)、1以上の数値(10より大きい数値も指定可)
エンジンプロセスの起動時間を短縮するために上記の数分のエンジンを予め起動しておき、待機します。
エンジンの利用状況の確認
タスクマネージャーでの確認
Pythonサービスのサーバ端末上で、タスクマネージャーからエンジンプロセス(java.exe)の数を確認できます。ここで表示されるエンジンプロセスの数の最大値が「engine.session.max + engine.queue.size」になります。
例えば、タスクマネージャーの「詳細」タブにて「コマンドライン」列を表示させて、「java.exe」プロセス(Node Managerインストール先にあるjava.exeから起動)のうち、「-Dport=62XXX」のプロセスがPythonサービスのエンジンプロセスとなります。
ログでの確認
Pythonサービスの設定上DEBUGログ(参考資料)を有効にした場合はログからエンジンの利用状況を確認できます。
以下の設定値を例に説明します。
engine.session.max: 5
engine.queue.size: 3
ログファイルのパス例:
C:\tibco\tsnm\12.0.8\nm\logs\python-service-8ec23c3e-104b-476e-a655-742a0b6e1323.log
ログ出力の例:
DEBUG 2023-11-01T14:48:03,719+0900 [EngineStats] topology.monitor.ServicePerformanceLogger: 8 alive; Q 3/3; 5 in use; 0 starting; 26 started; 20 destroyed; 2 failed at startup
各部分の数値は以下の内容を表しています。
項目 | 説明 | 補足 |
8 alive | 動作中のエンジン数 |
|
Q 3/3 |
Q内のエンジン数 / Q内のエンジン最大数 ※Q:キュー、待機中のエンジン |
|
5 in use |
使用中(データ関数実行中)のエンジン数 |
|
0 starting | 起動処理中のエンジン数 |
|
26 started | 起動したエンジン数の累積(動作中、破棄済みを含む) |
|
20 destroyed | 破棄済みのエンジン数 | |
2 failed at startup | 起動に失敗したエンジン数 |
セッションへの補足説明
本資料内で記載している「セッション」とは、Pythonサービス側でデータ関数を実行する際に開始されるもので、1つのセッションは1つのエンジンプロセス内で処理されており、セッション終了時にはエンジンプロセスも停止されます。
また、分析単位でセッションが分かれています。例えば以下のそれぞれが別々のセッションとなります。
- Analystで分析を開いて、データ関数をサーバ強制で実行
- ブラウザで分析を開いて、データ関数を実行
- ブラウザで別のタブで分析を開いて、データ関数を実行
さらに、1つの分析内に含まれている複数のデータ関数が同時に実行される場合、これらのデータ関数が同一セッション内で実行されます。セッション内では同時には1つのデータ関数しか実行できないため、同じ分析から複数のデータ関数を一緒に起動した場合は並列ではなく順番に実行されます。すなわち1つ目のデータ関数の実行が終了した後に2つ目のデータ関数が実行し始めます。
同一分析閲覧中に、Pythonデータ関数の実行が完了した後には一定な時間が経つとセッション(すなわちエンジンプロセス)が破棄されることがあります。この後にデータ関数を再度実行する際には新しいセッション(エンジンプロセス)を使用します。