目次
1. top (Linux コマンド)
スレッドがメソッドを呼び出すときの追加の重要な操作を示します。上記のメソッド呼び出しを変更します。
スレッド ステータスが生成される理由。
概要
Linux コマンド ps と同様
ホームページ Java &#&チュートリアル Java で JVM コマンドを使用してサーバーのトラブルシューティングを行う方法

Java で JVM コマンドを使用してサーバーのトラブルシューティングを行う方法

Oct 17, 2018 pm 03:28 PM
jstack Linuxコマンド

この記事では、Java で JVM コマンドを使用してサーバーのトラブルシューティングを実装する方法を紹介します。困っている友人は参考にしていただければ幸いです。

1. top (Linux コマンド)

top コマンドを実行します: (以下で使用されるプロセス 15477 の詳細を参照)

システム情報 (最初の 5 行):

    • 行 1: 上位タスク キュー情報 (システムの実行ステータスと平均負荷)、稼働時間と同じコマンド結果。

      • 平均システム負荷: シングルコア CPU の場合、0.00 は負荷なし、1.00 は完全負荷のみ、1 を超えると過負荷を意味します。理想的な値は 0.7、

      • マルチコア CPU 負荷: CPU コアの数 * 理想値 0.7 = 理想的な負荷、たとえば、4 コア CPU 負荷は 2.8 を超えません。高負荷はありません。

      • #形式: xx 日まで、HH:MM

      • 例: 241 日、20:11 を意味します。連続 241 日、20 時間 11 分実行

      • セクション 1: システムの現在時刻、例: 16:07:37

      • 段落 2: システムの実行時間、再起動までの時間。時間が長いほど、システムはより安定します。


      • #段落 3: 現在ログインしているユーザーの数。例: 1 ユーザー。現在ログインしているユーザーが 1 人だけであることを示します
      • 段落 4 セグメント: システム負荷、つまりタスク キューの平均長。3 つの値はそれぞれ、過去 1 分間、5 分間、および 15 分間の平均システム負荷をカウントします。

      • # 行 2: タスク プロセス関連情報

    • 段落 1: プロセスの合計数 (例: タスク) : 合計 231、合計 231 のプロセスが実行されていることを示します
      • 段落 2: 実行中のプロセスの数、例: 1 running,

      • 段落3: スリープ状態のプロセスの数、例: 230 スリープ状態、

      • 段落 4: 停止したプロセスの数、例: 0 停止、

      • 段落 5: ゾンビ プロセスの数、例: 0 ゾンビ

      • 行 3: CPU CPU 関連情報 マルチコア CPU の場合は、数字の 1 を押します。このとき、1行目はCPUコア番号行に変換され、番号1を前後に切り替えることができます。

    • 段落 1:
      • us

        ユーザー スペースが占有する CPU の割合 たとえば、 : Cpu (s): 12.7%us, 段落 2:

        sy
      • カーネル空間が占有する CPU の割合 (例: 8.4%sy,##)
      • #段落 3: ni

        ユーザー プロセス空間内で優先順位が変更されたプロセスによって占有される CPU の割合 (例: 0.0%ni,
      • )

        4 番目のセクション: id

        アイドル状態の CPU の割合 (例: 77.1%id,
      • セクション 5: wa

        割合)入力と出力を待機している CPU 時間。例: 0.0%wa,
      • 段落 6: hi

        CPU がハードウェア割り込みを処理するのに費やした合計時間。例: 0.0%hi,
      • 段落 7: si

        CPU サービスのソフト割り込みに費やされた合計時間、例: 1.8%si,
      • ##段落 8 : st スチール時間 ハイパーバイザーによって仮想マシンから盗まれた CPU 時間 (仮想マシンが現在ハイパーバイザーの下にある場合、ハイパーバイザーは実際に CPU 処理時間の一部を消費します)

      • 行 4:

        Mem メモリ関連情報
      (Mem: 合計 12196436k、使用済み 12056552k、空き 139884k、バッファー 64564k)
    • 段落 1: 物理メモリの合計量、例: Mem: 12196436k total,

      • 段落 2: 合計使用されている物理メモリの量、例: 12056552k used,
      • セクション 3: 合計空きメモリ、例: Mem: 139884k free、
      • セクション 4: カーネルとして使用 キャッシュされたメモリの量、例: 64564k バッファ
      • 行 5: スワップ スワップ パーティション関連情報 (スワップ: 合計 2097144k、使用済み 151016k、 1946128k 空き、3120236k キャッシュ)

    • 段落 1: スワップ領域の合計量 (例: Swap: 2097144k total,

    • )
        段落 2: 使用済みスワップ領域の合計量、例: 151016k used,
      • セクション 3: 空きスワップ領域の合計量、例: 1946128k free、
      • # セグメント 4: 合計バッファー スワップ領域、キャッシュされた 3120236k
      • #プロセス情報:
    上部のコマンドを押します。 f を押して表示された列情報を表示し、対応する文字を押して列をオン/オフにします。大文字はオンを意味し、小文字はオフを意味します。 * のマークが付いている列はデフォルトの列です。

##A:

PID

= (プロセス ID) プロセス ID;
    • E: USER = (ユーザー名) プロセス所有者のユーザー名。

    • H: PR = (優先度) 優先度

    • I: NI = (いい値) いい価値。負の値は優先度が高いことを表し、正の値は優先度が低いことを表します

    • O: VIRT = (仮想イメージ (kb))プロセス使用量 仮想メモリの総量、単位 kb。 VIRT=SWAP RES

    • Q: RES = (常駐サイズ (kb)) プロセスによって使用され、スワップアウトされなかった物理メモリサイズ、単位はkb。 RES=CODE DATA

    • T: SHR = (共有メモリ サイズ (kb)) 共有メモリ サイズ、単位 kb

    • W: ##S = (プロセスステータス) プロセスステータス。 D=無中断スリープ状態、R=実行中、S=スリープ、T=追跡/停止、Z=ゾンビプロセス

    • K: % CPU = (CPU 使用率) 前回の更新以降の CPU 時間使用率の割合

    • N: %MEM = (メモリ使用量 (RES)) プロセスによって使用される物理メモリの割合

    • ##M:
    • TIME

      = (CPU 時間、100 分の 1) ) プロセスによって使用される合計 CPU 時間、単位 1/100 秒 b: PPID
      = (親プロセス Pid) 親プロセス ID c: RUSER
      = (実数)ユーザー名) d: UID
      = (ユーザー ID) プロセス所有者のユーザー ID f: GROUP
      = (グループ名) プロセスのグループ名owner g: TTY
      = (制御 Tty) 起動プロセスの端末名。ターミナルから開始されていないプロセスは、? j: P
      = (最後に使用された CPU (SMP)) として表示されます。最後に使用された CPU は、マルチ CPU 環境でのみ意味を持ちます。 : SWAP = (スワップ サイズ (kb)) スワップアウトされるプロセスによって使用される仮想メモリのサイズ (kb
      l): TIME = (CPU 時間)プロセスによって使用される CPU 合計時間 (秒単位)
      r: CODE = (コード サイズ (kb)) 実行可能コードによって占有される物理メモリ サイズ (kb 単位)
      s: DATA = ( データ スタック サイズ (kb)) 実行コード以外の部分 (データ セグメント スタック) が占有する物理メモリのサイズ、単位 kb
      u: nFLT = (ページ フォールトcount) ページ フォールトの数
      v: nDRT = (ダーティ ページ カウント) 最後に書き込まれてから変更されたページの数
      y: WCHAN = (関数のスリープ中) プロセスがスリープ状態の場合、スリープ中のシステム関数名を表示します
      z: Flags = (タスク フラグ ) タスク フラグ。「」を参照してください。 sched.h

      X:
    • COMMAND
    • = (コマンド名/行) コマンド名/コマンド行

      #リファレンス Linux パフォーマンス分析ツールのトップ コマンドの詳細な説明
    top -Hp 15477 などの top -Hp PID を実行します
#プロセス内のスレッドを表示します

#注: ここでは、 PID はスレッド ID です

スレッド 15571 に例外があり、それを確認する必要がある場合は、jstack を使用してスタックを出力し、スレッドのステータスを確認します。 15571 (15571 16 進数 = 3cd3)

## 2. jstack リファレンス Java コマンド -- jstack ツール

Java コマンド学習シリーズ(2)-Jstack

これを使用するには、JDK インストール ディレクトリに移動する必要があります (ps x を通じて Java プロセスを表示し、jdk インストール ディレクトリを取得できます)

./jstack PID (プロセス ID) ./jstack 15477

赤いボックスはスレッド 15571 (16 進数 = 3cd3) ステータス

jstack ログを分析します:

Monitor モニター:

モニターは、Java においてスレッド間の相互排他と協調を実現するための主要な手段であると考えられます。オブジェクトまたはクラス ロックとして。

すべてのオブジェクトにはモニターが 1 つだけあります。

次の図は、スレッドとモニターの関係と、スレッドの状態遷移を示しています。

Enter Set:スレッドが同期を通じてオブジェクトのロックを取得することを要求していることを示します。オブジェクトがロックされている場合は、所有者を入力します。それ以外の場合は、入力領域で待機します。オブジェクトのロックが他のスレッドによって解放されると、そのスレッドはすぐに競合に参加します。

Owner (所有者): スレッドがオブジェクト ロックの競合に成功したことを示します。

Wait Set: スレッドがオブジェクトの object.wait() メソッドを通じてオブジェクトのロックを解放し、ウェイクアップされるまで待機領域で待機することを示します。

図からわかるように、モニターは特定の時点で 1 つのスレッドのみが所有でき、そのスレッドは <span style='font-family: "Microsoft YaHei"'>アクティブ スレッド</span> 、他のスレッドはそれぞれ 2 つのキュー <span style='font-family: "Microsoft YaHei"'>Entry</span> ## で <span style='font-family: "Microsoft YaHei"'></span>Waiting Thread<span style='font-family: "Microsoft YaHei"'></span> になっています。 #Set<span style='font-family: "Microsoft YaHei"'></span> と Wait<span style='font-family: "Microsoft YaHei"'> </span>Set<span style='font-family: "Microsoft YaHei"'></span> 内で待機します。

#Entry <span style='font-family: "Microsoft YaHei"'>Set</span><span style='font-family: "Microsoft YaHei"'></span> で待機しているスレッド アクションは モニターのエントリーを待っています。 <span style='font-family: "Microsoft YaHei"'></span>

Wait <span style='font-family: "Microsoft YaHei"'>Set</span><span style='font-family: "Microsoft YaHei"'></span> で待機しているスレッド アクションは Object.wait()<span style='font-family: "Microsoft YaHei"'></span> 内。 スレッドがクリティカル セクションへの参加を申請すると、スレッドはエントリ セット キューに入ります。 <span style='font-family: "Microsoft YaHei"'></span>

(同期によって保護されたコード セグメントをクリティカル セクションと呼びます。スレッドがクリティカル セクションへの進入を申請すると、スレッドは「エントリ セット」キューに入ります)

スレッドのステータス:

NEW

: 開始されていません。ダンプには表示されません。

RUNNABLE

: 仮想マシンで実行され、実行状態になります。 オーナーエリア

BLOCKED

: ブロックされており、モニターのロックを待機しています。 エントリーセットエリアでロックを待っています

WATING

: 別のスレッドが特定の操作を実行するまで無期限に待機します。 「待機セット」領域で特定の条件またはモニターが発生するまで待機します。通常は wait() などのステートメント内に留まります。

TIMED_WATING

: 別のスレッドからの特定の操作を時間制限付きで待機します。 Wait Set 領域で、 と WAITING の違いは、wait() および他のステートメントが wait(timeout) の時間制限を追加することです。

終了

: 終了しました。 呼び出し変更

スレッドがメソッドを呼び出すときの追加の重要な操作を示します。上記のメソッド呼び出しを変更します。

locked

ターゲット: synchronized を使用して、オブジェクト ロックを正常に適用します (モニターの所有者)。 オーナーエリア。

waiting to lock

Target: 同期を使用したオブジェクト ロックのアプリケーションが失敗しました。エントリ セット領域でロックを待機しています。スレッドのステータスは Blocked

waiting on

目標: synchronized を使用してオブジェクト ロックを正常に適用した後、ロックを解放し、ロックが完了するまで待ちます。待機セット領域。スレッドのステータスは WAITING または TIMED_WATING

parking to wait for

ターゲット: park() が呼び出され、 は待機セット領域にあり、待機中です。許可。

(park は、モニターを介してオブジェクトをブロックしない基本的なスレッド ブロック プリミティブです。

park: WAITING 状態に入り、比較しますwait は、ロックを取得せずにスレッドを WAITING にし、パーク解除によってウェイクアップすることができます)

スレッド アクション

スレッド ステータスが生成される理由。

runnable

: Object.wait() の Owner 領域、ステータス RUNNABLE

: wait() を呼び出し、Wait Set 領域、ステータスは次のとおりです。 WAITING または TIMED_WAITING、待機中を変更します

監視エントリの待機中

: ロック待機中、エントリ セット領域、ステータス BLOCKED、ロック待機中を変更します

待機中条件

: 特定の条件により駐車中、待機セット領域、ステータスは待機中です。

sleeping

: Thread.sleep() と呼ばれるスリープ状態のスレッド

概要

1. まずスレッド ステータス/スレッド アクションを確認して (より直感的)、スレッドが現在どの段階にあるかを確認します。次に、呼び出しの変更とロックのステータスを確認すると、基本的にセカンダリ スレッドに問題があるかどうかを判断できます。問題がある可能性があります)、考えられる問題を確認してください。特定のスレッドのこの状況により、問題を効果的に見つけることができます。

3. jps

Linux コマンド ps と同様

参考 Java コマンド学習シリーズ (1) - Jps

./jps

./jps -q

./jps -m

./jps -l

./jps -v

## 4. jmap

参考: Javaコマンド学習シリーズ(3) - Jmap

javaコマンド--jmapコマンドの使い方

jmap -heap PID: ヒープの使用状況

jmap -histo PID: オブジェクト 状況

(jmap -histo:live このコマンドが実行されると、JVM は最初に gc をトリガーし、次に統計情報を収集します。

プロジェクトのクラスに注目します。 [C は文字列配列であり、文字列が使用されます。[B はネットワーク層で使用されるバイト配列です。この 2 つが大きいかどうかは問題ではありません。[C は char[]

です。

[S は short[]

[I は int[]
[B は byte[]
[[I is a int[] []
概要: 上記がこの記事の全内容です。その他の関連チュートリアルについては、# を参照してください。 ##Java ビデオ チュートリアル 、##。 #Java 開発グラフィック チュートリアル
ブートストラップ ビデオ チュートリアル !

以上がJava で JVM コマンドを使用してサーバーのトラブルシューティングを行う方法の詳細内容です。詳細については、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linux でのタスク マネージャーの使用 Linux でのタスク マネージャーの使用 Aug 15, 2024 am 07:30 AM

「Linux にはタスク マネージャーはありますか?」、「Linux でタスク マネージャーを開くにはどうすればよいですか?」 Linux 初心者がよく尋ねる質問は数多くあります。Windows のユーザーは、タスク マネージャーが非常に便利であることを知っています。 Windows で Ctrl+Alt+Del を押すと、タスク マネージャーを開くことができます。このタスク マネージャーには、実行中のすべてのプロセスとそれらが消費するメモリが表示され、タスク マネージャー プログラムからプロセスを選択して強制終了できます。初めて Linux を使用するときは、Linux のタスク マネージャーに相当するものを探すこともあります。 Linux の専門家は、プロセスやメモリ消費量などを確認するためにコマンド ラインを使用することを好みますが、そうする必要はありません。

中国語監視サーバーZabbixにおけるグラフ・チャートの表示が文字化けする問題を解決 中国語監視サーバーZabbixにおけるグラフ・チャートの表示が文字化けする問題を解決 Jul 31, 2024 pm 02:10 PM

Zabbix の中国語サポートはあまり良くありませんが、それでも管理目的で中国語を選択することがあります。これは、グラフィック アイコンの下に小さな四角形が表示されます。これは間違っており、フォントをダウンロードする必要があります。たとえば、「Microsoft Yahei」、「Microsoft Yahei.ttf」は「msyh.ttf」という名前になり、ダウンロードしたフォントを /zabbix/fonts/fonts にアップロードし、/zabbix/include/defines.inc.php 内の 2 つの文字を変更します。ファイルの定義('ZBX_GRAPH_FONT_NAME','DejaVuSans');define('ZBX_FONT_NAME'

Linux ユーザーの登録日を確認する 7 つの方法 Linux ユーザーの登録日を確認する 7 つの方法 Aug 24, 2024 am 07:31 AM

Linux システムでアカウントの作成日を確認する方法をご存知ですか?知っていたら何ができるでしょうか?成功しましたか? 「はい」の場合、どうすればよいですか?基本的に Linux システムはこの情報を追跡しません。では、この情報を取得する別の方法は何でしょうか?なぜこれをチェックするのか疑問に思われるかもしれません。はい、この情報を確認する必要がある状況があり、そのときに役立ちます。以下の7つの方法で確認できます。 /var/log/secure を使用する aureport ツールを使用する .bash_logout を使用する chage コマンドを使用する useradd コマンドを使用する passwd コマンドを使用する last コマンドを使用する 方法 1: /var/l を使用する

5 分で Fedora にフォントを追加する方法を教えます 5 分で Fedora にフォントを追加する方法を教えます Jul 23, 2024 am 09:45 AM

システム全体のインストール フォントをシステム全体にインストールすると、すべてのユーザーがそのフォントを使用できるようになります。これを行う最善の方法は、公式ソフトウェア リポジトリから RPM パッケージを使用することです。開始する前に、Fedora Workstation の「ソフトウェア」ツール、または公式リポジトリを使用する他のツールを開きます。選択バーで「アドオン」カテゴリを選択します。次に、カテゴリ内の「フォント」を選択します。以下のスクリーンショットにあるような、使用可能なフォントが表示されます。 フォントを選択すると、いくつかの詳細が表示されます。いくつかのシナリオに応じて、フォントのサンプル テキストをプレビューできる場合があります。 「インストール」ボタンをクリックしてシステムに追加します。システム速度とネットワーク帯域幅によっては、このプロセスが完了するまでに時間がかかる場合があります。

Linux システムで WPS にフォントがないためにファイルが文字化けする場合はどうすればよいですか? Linux システムで WPS にフォントがないためにファイルが文字化けする場合はどうすればよいですか? Jul 31, 2024 am 12:41 AM

1. インターネットからフォント wingdings、wingdings2、wingdings3、Webdings、および MTExtra を見つけます。 2. メイン フォルダーに入り、Ctrl+H (隠しファイルを表示) を押し、.fonts フォルダーがあるかどうかを確認します。 3. wingdings、wingdings2、wingdings3、Webdings、MTExtra などのダウンロードしたフォントをメイン フォルダーの .fonts フォルダーにコピーし、wps を起動して、「システムにフォントがありません...」というリマインダー ダイアログがまだあるかどうかを確認します。そうでない場合は、「成功」をクリックしてください。

Centos 7 のインストールと構成 NTP ネットワーク時刻同期サーバー Centos 7 のインストールと構成 NTP ネットワーク時刻同期サーバー Aug 05, 2024 pm 10:35 PM

実験環境: OS: LinuxCentos7.4x86_641。現在のサーバーのタイムゾーンを表示し、タイムゾーンをリストし、タイムゾーンを設定します (すでに正しいタイムゾーンである場合はスキップしてください): #timedatectl#timedatectllist-timezones#timedatectlset-timezoneAsia /上海2. タイムゾーンの概念の理解: GMT、UTC、CST、DSTUTC: 国際無線通信の状況では、統一するために、地球全体が 24 のタイムゾーンに分かれています。協定世界時 (UTC) :UniversalTim と呼ばれる統一時刻が使用されます。

1本のネットワークケーブルを使用して2つのUbuntuホストをインターネットに接続する方法 1本のネットワークケーブルを使用して2つのUbuntuホストをインターネットに接続する方法 Aug 07, 2024 pm 01:39 PM

1 本のネットワーク ケーブルを使用して 2 つの ubuntu ホストをインターネットに接続する方法 1. ホスト A: ubuntu16.04 とホスト B: ubuntu16.042 を準備します。ホスト A には 2 つのネットワーク カードがあり、1 つは外部ネットワークに接続され、もう 1 つは外部ネットワークに接続されます。ホストBに。 iwconfig コマンドを使用して、ホスト上のすべてのネットワーク カードを表示します。上に示したように、作成者の A ホスト (ラップトップ) 上のネットワーク カードは次のとおりです。 wlp2s0: これはワイヤレス ネットワーク カードです。 enp1s0: 有線ネットワーク カード、ホスト B に接続されているネットワーク カード。残りの部分は私たちには関係ないので、気にする必要はありません。 3. A の静的 IP を構成します。ファイル #vim/etc/network/interfaces を編集して、以下に示すようにインターフェイス enp1s0 の静的 IP アドレスを構成します (#==========

投げ捨てる! Raspberry Pi で DOS を実行する 投げ捨てる! Raspberry Pi で DOS を実行する Jul 19, 2024 pm 05:23 PM

CPU アーキテクチャが異なるため、Raspberry Pi 上で DOS を実行するのは簡単ではありませんが、それほど問題はありません。 FreeDOS は誰にとっても馴染みのあるものかもしれません。これは、DOS 用の完全な無料の互換性の高いオペレーティング システムであり、一部の古い DOS ゲームや商用ソフトウェアを実行でき、組み込みアプリケーションも開発できます。プログラムが MS-DOS 上で実行できる限り、FreeDOS 上でも実行できます。 FreeDOS のイニシエーターおよびプロジェクト コーディネーターとして、多くのユーザーが内部関係者として私に質問をします。私が最もよく聞かれる質問は、「FreeDOS は Raspberry Pi 上で実行できますか?」というものです。この質問は驚くべきことではありません。結局のところ、Linux は Raspberry Pi 上で非常にうまく動作します

See all articles