この記事では、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: システムの実行時間、再起動までの時間。時間が長いほど、システムはより安定します。
- 段落 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,
sy段落 2:
カーネル空間が占有する CPU の割合 (例: 8.4%sy,##) -
ユーザー プロセス空間内で優先順位が変更されたプロセスによって占有される CPU の割合 (例: 0.0%ni,#段落 3:
ni - )
アイドル状態の CPU の割合 (例: 77.1%id,4 番目のセクション:
id -
割合)入力と出力を待機している CPU 時間。例: 0.0%wa,セクション 5:
wa -
CPU がハードウェア割り込みを処理するのに費やした合計時間。例: 0.0%hi,段落 6:
hi -
CPU サービスのソフト割り込みに費やされた合計時間、例: 1.8%si,段落 7:
si ##段落 8 :
st
スチール時間 ハイパーバイザーによって仮想マシンから盗まれた CPU 時間 (仮想マシンが現在ハイパーバイザーの下にある場合、ハイパーバイザーは実際に CPU 処理時間の一部を消費します)-
Mem メモリ関連情報行 4:
段落 1: 物理メモリの合計量、例: Mem: 12196436k total,
- セクション 3: 合計空きメモリ、例: Mem: 139884k free、
- セクション 4: カーネルとして使用 キャッシュされたメモリの量、例: 64564k バッファ
- 行 5: スワップ スワップ パーティション関連情報 (スワップ: 合計 2097144k、使用済み 151016k、 1946128k 空き、3120236k キャッシュ)
段落 1: スワップ領域の合計量 (例: Swap: 2097144k total,
) - セクション 3: 空きスワップ領域の合計量、例: 1946128k free、
- # セグメント 4: 合計バッファー スワップ領域、キャッシュされた 3120236k
- #プロセス情報:
- 段落 2: 合計使用されている物理メモリの量、例: 12056552k used,
- 段落 2: 使用済みスワップ領域の合計量、例: 151016k used,
##A:
PID
= (プロセス ID) プロセス ID;E:
USER
= (ユーザー名) プロセス所有者のユーザー名。H:
PR
= (優先度) 優先度I:
NI
= (いい値) いい価値。負の値は優先度が高いことを表し、正の値は優先度が低いことを表しますO:
VIRT
= (仮想イメージ (kb))プロセス使用量 仮想メモリの総量、単位 kb。 VIRT=SWAP RESQ:
RES
= (常駐サイズ (kb)) プロセスによって使用され、スワップアウトされなかった物理メモリサイズ、単位はkb。 RES=CODE DATAT:
SHR
= (共有メモリ サイズ (kb)) 共有メモリ サイズ、単位 kbW: ##S
= (プロセスステータス) プロセスステータス。 D=無中断スリープ状態、R=実行中、S=スリープ、T=追跡/停止、Z=ゾンビプロセス
K: % CPU
= (CPU 使用率) 前回の更新以降の CPU 時間使用率の割合
N: %MEM
= (メモリ使用量 (RES)) プロセスによって使用される物理メモリの割合
##M: - TIME
= (CPU 時間、100 分の 1) ) プロセスによって使用される合計 CPU 時間、単位 1/100 秒
X:b:
PPID
= (親プロセス Pid) 親プロセス IDc:
RUSER
= (実数)ユーザー名)d:
UID
= (ユーザー ID) プロセス所有者のユーザー IDf:
GROUP
= (グループ名) プロセスのグループ名ownerg:
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 COMMAND - = (コマンド名/行) コマンド名/コマンド行
#リファレンス Linux パフォーマンス分析ツールのトップ コマンドの詳細な説明
#注: ここでは、 PID はスレッド ID です
スレッド 15571 に例外があり、それを確認する必要がある場合は、jstack を使用してスタックを出力し、スレッドのステータスを確認します。 15571 (15571 16 進数 = 3cd3)
## 2. jstack リファレンス Java コマンド -- jstack ツール
Java コマンド学習シリーズ(2)-Jstack
jstack ログを分析します:
次の図は、スレッドとモニターの関係と、スレッドの状態遷移を示しています。
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: 同期を使用したオブジェクト ロックのアプリケーションが失敗しました。エントリ セット領域でロックを待機しています。スレッドのステータスは Blockedwaiting on
目標: synchronized を使用してオブジェクト ロックを正常に適用した後、ロックを解放し、ロックが完了するまで待ちます。待機セット領域。スレッドのステータスは WAITING または TIMED_WATINGparking 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 参考 Java コマンド学習シリーズ (1) - Jps ./jps ## 4. jmap [S は short[] [I は int[]概要
Linux コマンド ps と同様
./jps -q
./jps -m
./jps -l
./jps -v
[B は byte[]
[[I is a int[] []
概要: 上記がこの記事の全内容です。その他の関連チュートリアルについては、# を参照してください。 ##Java ビデオ チュートリアル 、##。 #Java 開発グラフィック チュートリアル
、ブートストラップ ビデオ チュートリアル !
以上がJava で JVM コマンドを使用してサーバーのトラブルシューティングを行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
