検索

Java スレッド ダンプは、スタック メモリ内のすべてのライブ処理スレッドのダンプとして定義されます。これは、スパイク、デッドロック、メモリの問題、いくつかのデフォルトのエラー コードで応答しないアプリケーションなどの CPU 使用率を診断するためのアーティファクトにおいて重要な役割を果たします。また、他のシステム関連の問題も計算され、スレッドに関連している場合でも、いくつかのデフォルトのエラー コードが表示されて、リクエストと応答時間が短縮されます。ダンプ メッセージはアプリケーション サーバーに基づいてサーバー構成ファイルに設定されます。主に、JVM で定期的に使用される複数のスレッド ダンプと少なくとも 10 個のダンプ スレッドに推奨されます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文

Java プログラミング言語を使用すると、より洗練された Web アプリケーションを作成するために使用されるデフォルトのクラスとメソッドを使用できます。ここで、スレッド ダンプはここのツールを使用して分析されます。 Java スレッド ダンプの基本構文は次のとおりです。

class className
{
public static void main(String[] args) throws Exception
{
Object o = new Object();
Object o1= new Object();
Thread t=new Thread(new DeadLockRunnable(o,o1));
t.sleep();
--some java code logics---
}
}

上記のコードは、デッドロックなどの概念を利用してスタック メモリにスレッド ダンプを作成するための基本的な構文です。さらに、DeadLockRunnable、ManagementFactory.getThreadMXBean(); などのいくつかのデフォルト メソッドを使用できます。これらは、プログラミング スタックでスレッド ダンプを実現するためのいくつかの方法です。

Java ではスレッド ダンプはどのように機能しますか?

Java アプリケーションでは、ブラウザとデスクトップ (スタンドアロン アプリケーションの場合) の両方でアプリケーションを実行するために Web サーバーとアプリケーション サーバーを使用しました。 Web サーバーを使用しているため、多数の同時ユーザーが処理するために数十から数百のスレッドにアクセスする必要があります。アプリケーションが複数のユーザーからアクセスされる場合、つまり、2 人以上のユーザーが同じリソースに同時にアクセスする場合、2 つのスレッド間の競合は避けられず、デッドロックが発生する場合もあります。 Web サーバーに基づいて、スレッド ダンプは次のように構成されます。 Apache tomcat は、/logs/Catalina.out のようなオプションを使用してスレッド ダンプを構成します。構成ファイルを開くと、出力 Java コードが構成されます (マルチスレッド概念に関係するものがある場合)。アプリケーションでは、サーバーがスタック トレースでエラーと例外をスローします。

スレッド ダンプには、アプリケーション ユーザーが生きているかどうかを示すさまざまな状態があります。それ以外の場合、Keep-Alive-Timer もスレッド名です。これは、KeepAliveCache スレッドを作成するために使用する必要があります。これは、生きている http スレッドのために必要です。 JVM を使用して作成されたすべてのスレッドは、スレッド状デーモンの後に開始されるため、最後に実行されていたスレッドからの JVM がマシンとアプリケーションの両方でシャットダウンするのを防ぐことはできません。

Runnable、Waiting/Timed_waiting、Blocked などの最も重要なスレッドの状態は、アプリケーションまたはプロセスがマルチスレッドである場合、スレッドが作成されるたびにスレッドのブロックと待機に使用されるいくつかの状態です。自動は、スレッドの優先度に関連するいくつかのメタデータ (スレッドを実行しているスレッドが実行可能モードの場合、OS スレッド優先度など) の後に Runnable インターフェイスに移動します。 ブロック状態は、アプリがマルチスレッドの完了後にスレッドをブロックするために使用されます。一方のスレッドは、ロック状態になるまで他方のスレッドが実行されるため、同期スレッド ブロックなどの概念とそのインスタンスを使用して、これが実現されます。待機ステータスとは、スレッドの待機時間が計算され、これらの状態で動作するのを待っていたスレッド プールと呼ばれるスレッド メモリに格納されています。

Java スレッド ダンプの例

さまざまな例を以下に示します:

例 #1

コード:

package com.first;
import java.net.ServerSocket;
import java.net.Socket;
public class Example {
public void run()
{
System.out.println("Multithreads names are : " + Thread.currentThread().getName());
}
public static void main(String[] args) throws Exception {
long waitingtimethread = 2000 * 30 * 2;
long startingthread = System.currentTimeMillis();
Thread t = new Thread();
t.start();
Thread.sleep(300);
t.run();
try (
ServerSocket s = new ServerSocket(3000);
Socket s1 = s.accept()
) {
Thread t1 = new Thread();
t1.start();
while (t1.isAlive()) {
if (demo(startingthread, waitingtimethread, t1)) {
t1.interrupt();
t1.join();
}
}
} catch (Exception e) {
System.err.println("The Excetion will be captured here."+e);
}
System.out.println("Multithreads names are : " + Thread.currentThread().getName());
System.out.println("We can check the daemon thread is used or not: "
+ Thread.currentThread().isDaemon());
}
static boolean demo(long startingthread, long waitingtimethread, Thread t1) {
return ((System.currentTimeMillis() - startingthread) > waitingtimethread) && t1.isAlive();
}
}

出力:

Java スレッド ダンプ

例 #2

コード:

package com.first;
import java.net.ServerSocket;
import java.net.Socket;
public class Example {
static boolean demo(long startingthread, long waitingtimethread, Thread t1) {
return ((System.currentTimeMillis() - startingthread) > waitingtimethread) && t1.isAlive();
}
public static void main(String[] args) throws Exception {
long waitingtimethread = 2000 * 30 * 2;
long startingthread = System.currentTimeMillis();
Thread t = new Thread();
Thread t2 = new Thread();
t.start();
Thread.sleep(300);
t.run();
try (
ServerSocket s = new ServerSocket(3000);
Socket s1 = s.accept()
) {
Thread t1 = new Thread();
t1.start();
while (t1.isAlive()) {
if (demo(startingthread, waitingtimethread, t1)) {
t1.interrupt();
t1.join();
t1.notifyAll();
t2.notify();
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Multithreads names are : " + Thread.currentThread().getName());
}
}

出力:

Java スレッド ダンプ

例 #3

コード:

package com.first;
public class Example extends Thread {
public void run()
{
System.out.println("Multithreads names are : " + Thread.currentThread().getName());
System.out.println("We can check the daemon thread is used or not: "
+ Thread.currentThread().isDaemon());
}
public static void main(String[] args)
{
Example e1 = new Example();
Example e2 = new Example();
e1.start();
e1.setDaemon(true);
e2.start();
}
}

出力:

Java スレッド ダンプ

上記の 3 つの例では、スレッド ダンプの概念にさまざまなシナリオを使用しました。また、notify()、Timed_Waiting()、sleep() など、さまざまな種類の組み込みスレッド メソッドを使用しました。これらの同時静的メソッドは、java.

内の複数のスレッドのダンプを実現します。

結論

一般に、スレッド ダンプは、Java ベースの Web アプリケーションが詳細な分析レポートを取得するための便利なメカニズムです。これには、アプリケーションに直接または間接的にアクセスする複数のユーザーが含まれます。これらのプロセスは、中断を解決し、アプリケーションのパフォーマンスを向上させるのに役立ちます。

以上がJava スレッド ダンプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。