jstack: プロセス内のスレッド状態を取得する方法

ASTERIA Warpのフロー実行中に処理が停止しない、などの現象が発生した場合、実行状況を確認するためにjstack情報の取得をお願いすることがあります。
その際、以下の方法で情報を入手してください。
(環境によっては、コマンドプロンプトを管理者モードで起動しないと正常に動作しない場合もあります。)

  1. JDKを導入する
    Oracle社のサイト等からJDKをダウンロードし、現象の発生するサーバー上にインストールします。
  2. FlowSerivceのPIDを特定する
    FlowServiceのPIDを特定します。
    いくつか方法があるので、詳しい内容については後述します。
  3. FlowSerivceの状態を取得する
    2で取得したPIDを使用し、下記のjstackコマンドを実行してFlowServiceの状態をファイルに取得します。
    Linux環境の場合はexeの拡張子を外してください。
    [JDK_INSTALL]/bin/jstack.exe [PID]>[任意のファイル名]
  4. 3で取得したファイルをご提供ください

 

■FlowServiceのPIDの特定方法について

  1. JDKのコマンドを利用して取得する方法
    下記のコマンドを実行し、PIDを取得してください。
    [JDK_INSTALL]/bin/jps.exe -lm
    ※[JDK_INSTALL]は、JDKのインストールディレクトリの事を指します。

    実行した結果から、以下のように表示されているプロセスがFlowServiceのプロセスとなります。
    [PID]の部分に表示される数字が、プロセスIDです。
    [PID] com.infoteria.asteria.framework.Main 〜flowservice.ifx
  2. PsExcecを使用する方法(Warpをサービス起動している場合)
    Windows環境にてローカルシステムアカウントでASTERIA Warpをサービス起動している場合は、JDKのバージョンやOSなどの状況によってはJDKのコマンドではPIDを取得できないという事例が報告されています。
    その場合は、Microsoft社のサイトよりツールを導入する方法をお試しください。
    ・PsExecの導入
    下記サイトよりPsToolをダウンロードし、展開したPsExec.exeにPathを通します。
    https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

    ・FlowSerivceのPIDを特定
    下記のコマンドを実行し。PIDを取得してください。(PsExec経由でJDKのコマンドを実行します。)
     PsExec.exe -s "[JDK_INSTALL]\bin\jps.exe" -lm
  3. WMICを使用する方法
    Windows環境にて管理者モードのコマンドプロンプトで下記を実行してください。
    WMIC PROCESS WHERE "NAME = 'java.exe' and COMMANDLINE LIKE '%FlowService.ifx%'" GET /FORMAT:LIST | find "ProcessId"
    下記のような結果が表示されますが、2行目がFlowServiceのPIDです。
    ParentProcessId=7520
    ProcessId=13160
  4. フローを作成してPIDを取得する方法(フローの作成や実行ができる場合に限る)
    WarpでPIDを取得するフローを作成し、実行することでPIDを取得します。
    詳しい方法は下記のFAQを参照してください。

    FlowServiceのPIDを取得する方法を教えてください
この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています

他のキーワードで検索する