コンテナ動作環境では、PCMIサービスのない構成でGlassFishを運用します。PCMIサービスが提供する機能のKubernetesベースのコンテナ動作環境での運用方法を、以下の表に示します。各機能の詳細は、以下を参照してください。
機能名 | コンテナ動作環境での運用方法 |
---|---|
プロセスの生存監視 | コンテナ動作環境がコンテナの生存状態を監視し、GlassFishのプロセスダウン時にコンテナを再起動しているため、特段の設定は不要です。 |
プロセスの生存通知監視 | Liveness Probeを利用します。 スレッドダンプを出力するには、jstackやkill -QUITを実行する処理を含むコマンドをLiveness Probeに指定します。(注) |
プロセスの起動時間監視 | 起動時間は、Startup Probeを利用してチューニングします。 起動タイムアウト時にスレッドダンプを出力するには、jstackやkill -QUITを実行する処理を含むコマンドをStartup Probeに指定します。(注) |
プロセスの停止時間監視 | 停止時間は、terminationGracePeriodSecondsを必要に応じてチューニングします。停止タイムアウト時にスレッドダンプを出力することはできませんが、PreStopフックを利用して停止時に毎回スレッドダンプを出力することは実現できます。(注) |
アプリケーション最大処理時間の監視 | アプリケーションの処理時間をServletフィルターで監視し、タイムアウトを超過した場合にLiveness Probeでエラーを返却するようにアプリケーションを作ることで、タイムアウト超過時にコンテナの再起動を実現することができます。 スレッドダンプを出力するには、jstackやkill -QUITを実行する処理を含むコマンドをLiveness Probeに指定します。(注) |
Java VMログ採取 | オンプレミス環境のJava VMログに出力される内容は、コンテナの標準出力または標準エラー出力に出力されるため、特段の設定は不要です。 |
カレントディレクトリ管理(作成/バックアップ) | コンテナ動作環境では、コンテナが停止するとコンテナ内で出力されたファイルは削除されるため、カレントディレクトリのローテーションは不要です。 |
PCMIサービスの起動時/停止時のスクリプトの実行 | コンテナ動作環境では、コンテナ起動と同時にGlassFishのプロセスの起動処理が動作するため、起動用スクリプトは不要です。 コンテナの停止時には、SIGTERMがコンテナに送信されることにより、GlassFishのプロセスが停止するため、停止用スクリプトは不要です。 |
環境変数の設定 | コンテナ動作環境の環境変数を設定する機能を利用します。 |
Javaヒープ領域/メタスペース不足時の制御 | コンテナ動作環境では、Java VMの動作に必要なメモリ領域が不足した場合、プロセスが強制停止されコンテナ動作環境によりコンテナが再起動します。 通常のJavaアプリケーション同様、アプリケーション、およびJakarta EEコンテナに「java.lang.OutOfMemoryError」を返却(スロー)する場合、コンテナイメージ作成時に以下のJava VMオプションを削除します。 -XX:InsufficientMemoryHandler=glassfishJavaVM-rhel-amd64 |
PCMIサービスの起動・停止 | コンテナ動作環境では、PCMIサービスが起動していない状態で、GlassFishのプロセスを起動・停止します。 コンテナを利用する場合、GlassFishのプロセスの監視はコンテナ動作環境で行うため、PCMIサービスを起動しないでください。 |
pcmilistprocessesコマンド | コンテナ動作環境では、コンテナ動作環境の機能(Liveness Probe、Readiness Probe、Startup Probe)を使用してGlassFishのプロセスの状態監視を行います。本コマンドはサポートしません。 |
pcmistatコマンド | コンテナ動作環境ではPCMIサービスが起動しないため、本コマンドはサポートしません。 |
setautostartコマンド | コンテナ動作環境ではPCMIサービスが起動せず、コンテナ起動時に自動的にGlassFishのプロセスが起動するため、本コマンドはサポートしません。 |
注) GlassFishのプロセスIDを以下のどちらかの方法で取得し、kill -QUITを実行することにより、スレッドダンプを出力できます。
DASまたはGlassFish Serverインスタンスのpidファイルを参照します。pidファイルについては、「A.1 DASのファイル構成」、「A.2 GlassFish Serverクラスターのファイル構成」を参照してください。
jpsコマンドを実行し、"ASMain"と表示される行のプロセスIDを参照します。
例
Liveness ProbeでアクセスするWebアプリケーションが異常なステータスコードを返却した場合にスレッドダンプを出力する場合
#!/bin/sh # Liveness Probeのアプリケーションにリクエストを送信します。 status=`/usr/bin/curl http://localhost:28080/liveness/status -o /dev/null -w '%{http_code}\n' -s` # HTTPステータスコードやレスポンスのBODYが異常な場合、 # pidファイルに記載されているGlassFishのプロセスIDに対してkill -QUITを送信することで、 # スレッドダンプが標準エラー出力に出力されます。 # pidファイルは起動処理中には存在しないため、 # Startup Probeでスレッドダンプを出力したい場合には、jpsコマンドでプロセスIDを確認します。 # ファイルに出力したい場合は、jstackを利用します。 if [ "${status}" != "200" ]; then pid_file="/var/opt/FJSVeapf/glassfish/nodes/localhost-domain1/container-instance/config/pid" if [ -f "${pid_file}" ]; then pid=`/usr/bin/cat "${pid_file}"` pid_status=$? else pid=`/opt/FJSVeapf/openjdk/jdk17/bin/jps | /usr/bin/grep ASMain | /usr/bin/awk '{print $1}'` pid_status=$? fi if [ "${pid_status}" -eq 0 ]; then /bin/kill -QUIT ${pid} > /dev/null 2>&1 /usr/bin/sleep 10 /bin/kill -QUIT ${pid} > /dev/null 2>&1 /usr/bin/sleep 10 fi exit 1 fi exit 0
注意
Amazon Elastic Container Serviceの場合、Kubernetesベースのコンテナ動作環境ではないため、Liveness Probe、Readiness Probe、Startup Probe、PreStopフック、terminationGracePeriodSecondsはありません。Amazon Elastic Container Serviceのドキュメントを参照して、必要に応じて同等の設定を行ってください。