本記事ではTDVのメモリ管理について以下3つの観点から説明します。
- TDVで管理されるメモリの種類
- Memoryパネルの見方
- メモリ量のチューニング設定
TDVで利用されるメモリについて
TDVはJVM上で動作しており、JVMに割り当てられたメモリ利用可能サイズ(Total Available Memory)を大きく3つの領域に分けて管理しています。領域はそれぞれManaged Memory, Unmanaged (Reserved) MemoryおよびUnmanaged Memoryとよばれ、以下の用途で利用されます。
用途 | メモリ領域 |
TDVサーバ内のクエリ処理(Joinや関数など) |
Managed Memory |
動的アクションの処理(クエリ最適化・キャッシュ更新・トリガー実行など) |
Unmanaged (Reserved) Memory |
クエリフェッチ結果のバッファ |
Unmanaged Memory |
サードパーティライブラリ用 |
各領域は固定値および相対値を利用してサイズが決定されます。Unmanaged(Reserved)Memoryは固定値でサイズを決定し、それ以外の領域は残りの利用可能領域から指定の割合に応じて確保されます。
たとえば、Total Available Memoryが8000MB,Unmanaged (Reserved) Memoryが60MB,Managed Memoryの確保割合が70%である場合、8000MBから60MBを引いた7940MBの70%(5558MB)がManaged Memory、その残り(2382MB)がUnmanaged Memoryに割り当てられます。
Memoryパネル
TDV Studioでは、マネージャのMemoryパネルからTDVサーバで消費しているメモリ量を領域別に確認することができます。
グラフと指標
マネージャから確認できるグラフでは各指標毎のメモリ使用量が時系列で表示されます。
指標名 | グラフ | 説明 |
Total Memory |
緑線 | TDVサーバで消費したメモリ量を示します。 |
Total Maximum Memory | 緑破線(----) | TDVで使用可能な最大メモリ量を示します。 |
Total Throttle Memory | 緑点鎖線(-・-・-) | 使用可能な最大スロットルメモリ量を示します。Total Memoryがこの値を上回った場合、メモリ不足エラーを防ぐため、新しいクエリはすべてキューに入れられ待機状態となります。 |
Managed Memory | 橙線 |
TDVで使用可能なメモリの割り当て量のうち、クエリ処理に利用されたメモリ量を示します。 |
Managed Maximum Memory | 橙破線(----) | 上記の最大サイズを示します。 |
メモリの開放
パネル下部にある"Free Unused Memory"ボタンをクリックすると、未使用のメモリを開放することができます。
チューニング
各種メモリサイズや割合の変更はTDV Studioの「管理」→「構成」から設定することができます。関連する主なパラメータを紹介します。
名前 | デフォルト値 | 説明 |
Total Available Memory (On Server Restart) | 2048 | TDVが利用できるJVMのヒープメモリサイズを設定します。MBytes単位で指定します。 |
Percent of Memory to Manage (On Server Restart) | 70 | Managed Memoryの確保割合を%単位で指定します。TIBCO社推奨値は70%となっています。 |
Unmanaged (Reserved) Memory (On Server Restart) | 60 | Unmanaged (Reserved) MemoryのサイズをMBytes単位で指定します。 |
Minimum Memory Threshold | 20 |
Total Throttle Memoryの算出に用いられる数値(MBytes)です。 TDVの利用可能メモリがこの数値を下回ると、新規クエリがキューに入れられサイズが確保されるまで待機状態となります。 |
Maximum Memory per Request | 30 |
1つのリクエストが実行中に制限されるManaged Memoryの確保割合を%単位で指定します。 |