legacy-knowledge-base
公開されました Sep. 10, 2025

Linux および Windows で複数の Java スレッド ダンプを生成する方法

written-by

Jorge Diaz

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • スループットの問題が発生した場合、Liferay サポート サービスは通常、Liferay サーバーから Java スレッド ダンプを 1 ~ 2 秒間隔で取得するよう求めます。
  • いくつかのスレッド ダンプを取得することで、Java スレッドがスタックしているか、完了するのに時間がかかりすぎているかを検出できます。
  • これらのスレッド ダンプ ファイルを効率的な方法で 1 ~ 2 秒間隔で簡単に生成するにはどうすればよいですか?

Environment

  • すべての Liferay バージョン

解決策

複数の Java スレッド ダンプを取得する最も簡単な方法は、定期的にダンプを生成するオペレーティング システム スクリプトを使用することです。

また、サーバー管理スクリプト タブから Groovy スクリプトを実行することもできます。

1. オペレーティング システム スクリプトの使用

この記事には、Linux/MacOS と Windows オペレーティング システムの両方に添付された 2 つのスクリプトが含まれています。 それらを使用して、スレッド ダンプを生成できます。

スレッド ダンプを生成する手順:

  1. プロセス PID を取得します。 最初のステップは、アプリケーション サーバーの PID を取得することです。
    • これは通常、 java jps -l コマンドライン ツールまたはオペレーティング システム コマンド (たとえば ps または netstat) を使用して取得されます。
    • 記事 JVM からスレッド ダンプを取得する は、アプリケーション サーバーの PID を取得する方法に関する詳細情報が含まれています。
  2. スクリプトを実行します。 PID を取得したら、オペレーティング システムに一致する添付のスクリプトを実行します。

これらのスクリプトは、java jstack コマンドを使用して、2 秒間隔で 30 個のスレッド ダンプを生成します。

2. Groovy スクリプトの使用

この記事には、[サーバー管理] スクリプト タブから実行できる Groovy スクリプトが含まれています。

スレッド ダンプを生成する手順:

  1. コントロール パネル => サーバー管理 => スクリプト タブに移動します。
  2. threaddumps.groovy スクリプト をスクリプト タブにコピーします。
  3. フォルダー 変数を出力フォルダーで更新します。デフォルト値は tomcat temp フォルダーです。
  4. 実行すると、以下のメッセージが表示されます。
    • Generating threaddumps in a background thread
      Threaddumps will be generated in the folder: /liferay/tomcat-9.0.56/temp

3. 生成されたファイル

生成されたファイルの名前は次のとおりです: threaddump-<pid>-<time>-<number>.txt

例:

threaddump-23065-151811-1.txt
threaddump-23065-151813-2.txt
threaddump-23065-151816-3.txt
threaddump-23065-151818-4.txt
threaddump-23065-151820-5.txt
threaddump-23065-151823-6.txt

4. トラブルシューティング

オペレーティング システムのスクリプトに問題がある場合:

  • PID のエラー: 999 そのようなプロセスはありません または 999 プロセスは実行されていません
    • 原因: 間違った PID を指定しました。 解決策: 再確認して正しいものを指定する
  • アクセス許可エラー: 9999: 操作は許可されていません または ソケット ファイルを開けません: ターゲット プロセスが応答していないか、HotSpot VM がロードされていません
    • 原因: アプリケーションサーバーを実行しているユーザーとは異なるユーザーでスクリプトを実行しました
    • 解決策: Liferay を実行している同じユーザーでスクリプトを実行します
    • または、root ユーザーでこれを実行します。
      •  sudo -u [user] ./threaddumps.sh [pid]
  • jstack の実行中にエラーが発生しました: jstack: コマンドが見つかりません または 「jstack」は内部コマンドまたは外部コマンドとして認識されません
    • 原因: 現在のユーザー PATH で jstack コマンドを使用できません
    • 解決策: のことを行う必要があります。
      • オプション 1: ユーザーの PATH 構成を変更します
      • オプション 2: threaddumps.sh / threaddumps.cmd スクリプトを編集し、「jstack」をフル パスに置き換えます (例: /usr/lib/jvm/java-11-openjdk-amd64/bin/ jstack)
      • オプション 3: Groovy スクリプトの代替手段を使用する

追加情報

did-this-article-resolve-your-issue

legacy-knowledge-base