Javaダンプ

PHPz
PHPzオリジナル
2024-08-30 15:09:571084ブラウズ

Java ダンプは、ネットワークの問題、メモリ エラー、またはユーザーが何らかの種類のキーストロークの組み合わせを開始したときに、仮想マシンが予期せず停止したときに誤って作成される Java コアの一部です。 Java ダンプは、アプリケーションのソース コードに組み込まれている Java Dump API を呼び出すか、コマンド ラインから -Xdump:java オプションを直接指定することによって簡単に作成できます。 Java Dump は、アプリケーションの実行が予期せず停止したときに発生する停止の根本原因のトラブルシューティングと診断に役立つ情報を提供することで、エンドユーザーを支援します。

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

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

構文

Java ダンプの必要性は問題の根本原因によって異なり、前述したようにさまざまなため、Java ダンプに特定の構文はありません。したがって、この構文フローは、ユーザーが根本原因を診断する必要があり、必要なリクエストを JVM に送信するだけで jcmd ツールを使用して分析を実行したい場合であり、送信に使用されるのと同じシステムを実行時に使用することが必須です。このリクエストはマシンと Java プログラムに送信されます。したがって、構文は次のように定義されます:

jcmd <process_ id> GC.heap_dump <pathname_for_file>

渡されるパラメータは次のとおりです :

: Java プログラムで実行中のプロセスの ID を提供するために使用されます。

: 前述のようにファイルが渡されるパスの名前。

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

Java ダンプのワークフローは、マシンのクラッシュ時やネットワーク停止などのさまざまな理由によるシステムの予期せぬ停止時に、エンドユーザーやプログラマーに大きな助けとなるという点で非常に興味深いものです。さらに、Java プログラムの実行を妨げるあらゆる形式のエラーは、Java ダンプを使用してトラブルシューティングと根本原因の診断に保存できます。 Java のダンプが機能することに基づいて、次のようなシナリオがいくつかあります。

  • 一般的な保護障害により Java アプリケーションがクラッシュした可能性があり、Java ダンプ ファイルが自動的に生成されるシナリオ。根本原因を克服して理解するには、スレッドの種類を理解するか、実行中の現在のスレッドを適切に把握して問題を簡単に特定することが非常に必要です。
  • 別のシナリオとしては、Java ヒープのメモリ不足が原因である可能性があり、これにより Java ダンプも自動的に生成されます。
  • シナリオは、すべてのスレッドが同時に同じスレッドをリソースとして取得しようとするデッドロック状況が原因である可能性があります。
  • ユーザーがキーストロークの組み合わせを実行した場合に、突然ハングアップする場合もあります。
  • 上記のシナリオに対処するには、根本原因を見つけて例外を捕捉する方法がいくつかあります。これには、エンドユーザーに簡単さと柔軟性を提供する多くの Java ダンプ ツールが含まれます。即時クラッシュ、または停止や OutOfMemory イベントなどのあまり好ましくない状況が発生したときのデバッグとトラブルシューティングの機能。

Java ダンプ ツールとテクノロジを使用して、すべてのシナリオとその根本原因を把握するさまざまな方法があります。これらは、メモリ リーク関連の問題やメモリ最適化問題のトラブルシューティングに非常に役立ちます。これらはほとんどの場合、バイナリ形式で hprof ファイルに保存されており、次のようなツールやテクノロジーを使用して視覚化および分析できます。

  • 適切なプロセス ID とファイル パスをツールに組み込むことにより、jmap などの JDK ツールを使用します。
  • JVM 内の同じマシンがヘッド ダンプに使用されている場合、リクエストと応答の作成を担当する jcmd を使用すると、根本原因と確認応答を読み取るために JVM にサービスが提供されます。
  • JVisualVM は JDK の一部としてのツールでもあり、Java ダンプを強化し、簡単に精査するための支援として使用されます。
  • ダンプを自動的かつプログラム的にキャプチャし、それに応じて出力を取得することも可能です。

Java ダンプの例

この例は、リソース上でデッドロックを実行するスレッドを示しています。リソース上でロックを取得したので、コマンド ラインで説明されているコマンドを使用して、Java ダンプでリソース上のこのデッドロックを分析できる可能性があります。

public class Java_lock_Dump_Demo {
public static void main(String[] args) throws InterruptedException {
Object ob_a = new Object();
Object ob_b = new Object();
Object ob_c = new Object();
Thread Java_lock_Dump_DemoThread1 = new Thread (new       Java_lock_Dump_Demo_Sync_Thread(ob_a, ob_b ), "Java_lock_Dump_DemoThread1");
Thread Java_lock_Dump_DemoThread2 = new Thread (new Java_lock_Dump_Demo_Sync_Thread(ob_b, ob_c ), "Java_lock_Dump_DemoThread2");
Thread Java_lock_Dump_DemoThread3 = new Thread (new Java_lock_Dump_Demo_Sync_Thread(ob_c, ob_a ), "Java_lock_Dump_DemoThread3");
Java_lock_Dump_DemoThread1.start();
Thread.sleep(3000);
Java_lock_Dump_DemoThread2.start();
Thread.sleep(3000);
Java_lock_Dump_DemoThread3.start();
}
}
class Java_lock_Dump_Demo_Sync_Thread implements Runnable {
private Object ob_a;
private Object ob_b;
public Java_lock_Dump_Demo_Sync_Thread(Object ob_a, Object ob_b) {
this.ob_a = ob_a;
this.ob_b = ob_b;
}
@Override
public void run() {
String nm = Thread.currentThread().getName();
synchronized (ob_a) {
System.out.println(nm + " acquire_the_lock_on_first_resource " + ob_a);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (ob_b) {
System.out.println(nm + " acquire_the_lock_on_second_resource " + ob_b);
}
System.out.println(nm + " Release_the_lock_for_second_object " + ob_b);
}
System.out.println(nm + " Release_the_lock_for_first_object " + ob_a);
System.out.println(nm + " Completed with the deadlock_test for acquiring the resource.");
}
}

出力:

Javaダンプ

上記でコンパイルされたコードのダンプを取得する方法は、次のコマンドを使用して実行できます:

  • First, retrieve the process id using the following command in the command line: jsp
  • Then, after getting the process id run the following command in the command line :
Jcmd<Process_id> GC.heap_dump <file-path>
jcmd 20528 GC.heap_dump C:\Users\adutta\eclipse-workspace\Matcher_Example\src

Conclusion

Java Dumps is considered a very interesting feature in java as It provides programmers and users with the ability to get out of the unwanted and unexpected situations at the time of halt in the running program as well as when the machine goes out of memory space. It also provides the user with detailed and proper content for the root cause or the troubleshooting issue.

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

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