プログラムにバグはありますか?これらのJVMツールはトラブルシューティングに役立つ可能性があります

プログラムにバグはありますか?これらのJVMツールはトラブルシューティングに役立つ可能性があります

[[373685]]

日々の開発では、メモリリーク、デッドロック、CPU など、さまざまな問題に常に遭遇します。問題に遭遇することは怖いことではありません。重要なのは、これらのエラーをどのようにトラブルシューティングし、適切な解決策を見つけるかです。しかし、多くの人々は、これらの問題の根本的な原因を見つけることができないことがよくあります。したがって、この記事の主な目的は、問題がどこにあるのかを分析するためのツールを習得できるようにすることです。

前回の記事では、主にJVMのメモリ構造、クラスロードの仕組み、ガベージコレクションの仕組みについて分析しました。記事の順序も段階的になっています。この記事では、主に JDK に付属するツールを分析し、理論を実践に適用します。

まず、これから説明するツールの概要を説明し、次にそれらを 1 つずつ分析してみましょう。

まず、これから説明するツールの概要を説明し、次にそれらを 1 つずつ分析してみましょう。

1. パフォーマンス監視ツールの概要

ツールは主に問題を解決するために作成されます。これらのツールが存在するのは、プログラムにパフォーマンス上の問題があるためです。実際、JDK をダウンロードした後、それらのツールは SUN から提供されました。

JDK インストール ディレクトリを確認すると、そのようなツールが多数あることがわかります。

このような exe ファイルは多数見つかりますが、その多くはパフォーマンス監視ツールです。いくつか抜粋して説明させていただきます。

ツール名 主な機能
jps (JVM プロセス ステータス ツール) 指定されたシステム内のすべての HotSpot 仮想マシン プロセスを表示します。
jstat (JVM 統計監視ツール) HotSpot仮想マシンのさまざまな動作データを収集する
jinfo (Java の構成情報) 仮想マシンの構成情報を表示する
jmap(Javaのメモリマップ) 仮想マシンのメモリダンプスナップショット(ヒープダンプファイル)を生成する
jhat (JVM ヒープダンプ ブラウザ) メモリ ダンプ スナップショットを分析します。推奨されません。リソースを消費し、速度が遅くなります。
jstack (Java のスタック トレース) VMのスレッドのスナップショットを表示する
Jコンソール JMXビジュアル管理ツール
ビジュアルVM オールインワン障害管理ツール

いくつかの一般的なツールがリストされています。実際には、JDK に付属するツールよりも優れたツールがいくつかあります。今後の記事でそれらをリストします。さて、これらのツールの機能とその使用方法を 1 つずつ分析してみましょう。

2. ツール

1. jps: 仮想マシンプロセスステータスツール

jps は主に、JVM で実行されているプロセスのステータス情報を出力するために使用されます。構文の形式は次のとおりです。

  1. jps [オプション] [ホストID]
  2. 最初のパラメータ: オプション
  3.  
  4. -q はクラス名、Jar 名、およびメインメソッドに渡されるパラメータを出力しません。
  5. -mはメインメソッドに渡されたパラメータを出力します
  6. -l メインクラスまたはJarの完全修飾名を出力します
  7. -vはJVMに渡されたパラメータを出力します
  8. 2番目のパラメータ: ホストID

ホストまたはサーバーの ID。指定されていない場合は、現在のホストまたはサーバーがデフォルトになります。

Windows 10 でテストしました。もちろん、Linux でも試すことができます。方法は同じですが、結果は異なる場合があります。テストするには、さまざまなパラメータ オプションを選択できます。 CMDを開いて対応するコマンドを入力します

2. jstack: スタックトレースツール

jstack は、現時点での仮想マシンのスレッド スナップショットを生成するために使用されます。構文の形式は次のとおりです。

  1. jstack [オプション] vmid
  2. 最初のパラメータ:オプション 
  3.  
  4. オプション効果
  5. -F 通常の出力要求に応答がない場合、スレッドスタックの出力を強制する
  6. -l スタック外のロックに関する追加情報を表示します
  7. -m ネイティブメソッドが呼び出された場合、C/C++ スタックを表示します。
  8. 2番目のパラメータ: vmid

vmid は Java 仮想マシン ID であり、通常は Linux/Unix システム上のプロセス ID です。

CMDで直接操作してみましょう:

3. jstat: 仮想マシン統計監視ツール

jstat は、仮想マシンのさまざまな動作状態情報を監視し、ローカルまたはリモートの仮想マシン プロセスにおけるクラスのロード、メモリ、ガベージ コレクション、JIT コンパイルなどの動作データを表示できます。構文の形式は次のとおりです。

  1. jstat [ 一般オプション |出力オプション vmid [間隔] [回数]]
  2. 最初のパラメータ: generalOption |出力オプション

このパラメータによって表されるオプションは、ユーザーが照会する仮想マシン情報を表し、クラスのロード、ガベージ コレクション、およびランタイム コンパイル ステータスの 3 つのカテゴリに分かれています。

2番目のパラメータ: vmid

vmid は Java 仮想マシン ID であり、通常は Linux/Unix システム上のプロセス ID です。

3番目のパラメータ: 間隔

間隔はサンプリング時間間隔であり、

4番目のパラメータ: count

カウントはサンプルの数を示します。

次に、このツールを使用して、CMD を開き、対応するコマンドを入力します。

4. jinfo: 仮想マシンのパラメータをリアルタイムで表示および調整する

コマンド形式:

  1. jinfo [オプション] pid

最初のパラメータ: オプション

  1. オプション効果
  2. -v 仮想マシンの起動時に指定されたパラメータリストを表示します
  3. -flag 仮想マシンの起動時に指定されていないパラメータのデフォルト値を表示します
  4. -sysprops は仮想マシンプロセスの System.getProperties() の内容を出力します。

2番目のパラメータ: pid

表示するプロセス ID を指定します。

CMDでテスト:

5. jmap: 仮想マシンのメモリダンプスナップショット(ヒープダンプファイル)を生成する

jmap (Java 用メモリ マップ) は、ヒープ ダンプのスナップショット (通常はヒープダンプまたはダンプ ファイル) を生成するために使用されます。 jmap コマンドが適用できない場合は、-XX:+HeapDumpOnOutOfMemoryError パラメータを使用して、仮想マシンのメモリがオーバーフローしたときにスナップショットを生成できます。または、kill -3 pid を使用して生成することもできます。 jmap の役割は、ダンプ ファイルを取得することだけではありません。また、スペースの使用状況や現在使用中のコレクターなど、ファイナライズ実行キュー、Java ヒープ、永続世代に関する詳細情報を照会することもできます。コマンドの形式は次のとおりです。

  1. jmap [オプション] vmid

最初のパラメータ:

2番目のパラメータ: vmid

vmid は Java 仮想マシン ID であり、通常は Linux/Unix システム上のプロセス ID です。

cmdでテスト:

6. jhat: メモリダンプスナップショットを分析するが、推奨されないし、遅い

このツールは機能が比較的単純で、実行に時間がかかるため、使用はお勧めしません。 MATが推奨されます。

7. JConsole: JMX のビジュアル管理ツール

以前のツールと比較すると、このツールはより頻繁に使用され、非常に重要です。さまざまなデータをグラフィカルに表示できる Java GUI 監視ツールです。また、リモート接続を通じてリモート サーバー VM を監視することもできます。 VM およびリモート VM を監視するために使用される、Java で記述された GUI プログラム。非常に使いやすく、非常に強力な機能を備えています。

cmd に jconsole と入力し、プロセスを選択します。 (前提として、スレッドを作成し、IDE ツールで実行します)

次に、対応するオプションを選択すると、このツールに入ると次のインターフェイスが表示されます。

そこにはメニューがあり、そのうちの 1 つを選択して表示できます。このツールは非常に使いやすく、私が以前に最も頻繁に使用したツールでもあります。

8. VisualVM: オールインワンの障害管理ツール

このツールも非常に強力です。これは、ローカルおよびリモート データを表示できるグラフィカル インターフェイスに基づく JAVA GUI 監視ツールです。 Jvisualvm は jconsole と同じように使用されます。コマンドラインに jvisualvm と入力して起動できます。 jvisualvm インターフェースはより美しく、データはよりリアルタイムです。

上部には、表示するさまざまなオプションを選択できるメニューもあります。自分で試してみるのが一番です。

結論

これらのツールについて私が言いたいことはこれだけです。記事の冒頭で、JDK には非常に多くのツールが付属しており、JDK バージョンの継続的な更新によりツールも増えていることがわかりました。それぞれを習得するには時間がかかりすぎます。遭遇した問題を検索し、どのようなツールが使用できるかを確認できます。リストされているツールは、初心者に適しています。

この記事はWeChat公式アカウント「Yugong Yaoyishan」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Yugongyaoyishanの公式アカウントまでご連絡ください。

<<:  クラウドコンピューティングの導入は単なる紙上の作業ではない

>>:  2021 年に注目すべき 8 つのエッジ コンピューティング トレンド

推薦する

おすすめする価値のある Kubernetes ダッシュボード ツール トップ 9

[[429325]] [51CTO.com クイック翻訳] Web ベースの Kubernetes ...

データキャプチャをクラウドに移行する5つの理由

10 年前には、クラウド コンピューティングがビジネス全体に与える劇的な影響を予測できた人はほとんど...

病院ウェブサイトの SEO の発展はどこに向かうのでしょうか?

現在、百度は多くの変化を遂げており、医療業界の病気用語のランキングを見ると、最適化されたサイトの痕跡...

姚小偉:史上最も包括的なウェブサイトの減量秘訣

ウェブサイトの重さを改善することは、常に検索者が注目するトピックですが、ウェブサイトの重さを正確かつ...

優れたユーザーエクスペリエンスを実現するための 5 つの要件

[編集者注] この記事は@nipal柜によって翻訳されました。この記事では、優れたユーザーエクスペリ...

8月22日のBaiduアルゴリズムのアップグレード、あなたのウェブサイトは準備ができていますか?

百度ウェブマスタープラットフォームは8月22日、百度のアルゴリズムアップグレードが不正サイトの掲載や...

Engage 2018 SalesEasy ユーザー カンファレンス: CT 時代の幕開けと新しい CRM の定義

9月13日、北京国際ホテルでEngage 2018 SalesEasyユーザーカンファレンスが開催さ...

Weiboマーケティングプロセスにおけるコンテンツの選択と公開

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeiboマーケティング...

コンテナを実行するのにDockerイメージは実際には必要ない

これは少し見出しっぽいですが、コンテナ イメージは単なる組織の rootfs であるというのは本当で...

2013 年に医療ウェブサイトのランキングを最適化する方法

医療分野で働いている友人は、自分のウェブサイトのランキングについて非常に心配しているに違いないと思い...

クラウドコンピューティングコアテクノロジー Dockerチュートリアル: Dockerデーモン dockerd 安全でないレジストリ

Docker はプライベート レジストリを安全か安全でないかを判断します。このセクションの残りの部分...

クラウドが成長するにつれて、ロックインの問題は大きくなるでしょうか?

HBO の壮大なファンタジーシリーズ「ゲーム・オブ・スローンズ」が複数のシーズンに渡って続いているよ...

Kafkaがメッセージを失わないようにするにはどうしたらよいかと質問されるたびに、私は泣きそうになります。

1. 背景の紹介この記事では、オンライン本番環境でメッセージ ミドルウェア テクノロジを使用する際...

初心者のためのウェブサイト診断レポートの書き方

先日書いた「Webサイト診断レポートの鉄則14か条(前編)」が皆様に好評をいただいており、大変嬉しく...

FESCAR: アリババの主要なオープンソース分散トランザクションソリューション

FESCAR: 高速かつ簡単なコミットとロールバックFESCARとは何ですか?マイクロサービス アー...