Javaプロセスは、何をしたか、すべての法医学の前に「の表を解剖」に転送されるのですか?

オリジナル:妹味(マイクロチャネル公共番号ID:xjjdog)、共有してくださいは、ソースを保管してください再現しました。

法医学のように、複雑なケースを恐れていない高度に分解体の恐れはありません。恐怖はほとんど、何も残されていません。空の、いずれかの高度な技術、豊富な経験は、起動することはできません。

複雑な生産環境では、数分ジャンプ処理の前に、現時点では、残る死ぬが横たわっていました。発見された証人として初めて、シーンを保つために注意を払う必要があります。時には、最悪の事態がもつれ、やけどされ、これは我々が見たいです。

人生のプロセスが消える前に、我々はまだやるべきことがたくさん持っています。この記事では、一般的に予約された手がかりをする方法を紹介します。最後に、このプロセスは、シェルスクリプトの自動化を使用します。

システム環境は、シーン内に存在しません。

図1に示すように、現在のネットワーク接続システム

ss -antp > $DUMP_DIR/ss.dump 2>&1
复制代码

このコマンドは、すべてのネットワークシステムは、出力ファイルss.dumpに接続されています。多くのケースでは、netstatネットワーク接続するので、代わりにSSをnetstatコマンドを使用する理由は、実装が非常に遅いです。

その後の処理、様々なカーディングを見て、ネットワーク接続の状態、またはあまりにもCLOSE_WAIT TIME_WAIT、またはその他の接続の問題をトラブルシューティングするためには、非常に便利です。

2、ネットワーク・ステータス・統計

netstat -s > $DUMP_DIR/netstat-s.dump 2>&1
复制代码

ネットワーク統計情報、netstatの-s.dumpファイルに出力。これは、出力の統計情報は、各契約によると、その後、ネットワーク全体の状況を把握非常に大きな役割を持つことができます。

sar -n DEV 1 2 > $DUMP_DIR/sar-traffic.dump 2>&1
复制代码

上記のコマンドは、sar出力電流のネットワークトラフィックを使用します。カード事態が発生した上で、このようなRedisのようにいくつかの非常に高速モジュール、で、カフカは、頻繁に実行されます。

3、プロセス・リソース

lsof -p $PID > $DUMP_DIR/lsof-$PID.dump
复制代码

これは非常に強力なコマンドです。あなたは、ファイルが開いているプロセスを表示することができ、これは人工物である、あなたは、プロセスへのリソース・ディメンションの全体の使用を表示することができます。リソース、遅く出力の多くでは、このコマンドは、待ちます。

4、CPUリソース

mpstat > $DUMP_DIR/mpstat.dump 2>&1
vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1
sar -p ALL  > $DUMP_DIR/sar-cpu.dump  2>&1
uptime > $DUMP_DIR/uptime.dump 2>&1
复制代码

これらの注文は、我々キャスト・アウェイ「(b)はCPUの章、」「ののLinux」の記事は、より詳しい説明があります。CPU負荷および現在のシステムからのメイン出力は、その後調査を容易にします。

これらの命令の機能は、重複の多くは、ユーザーがスクリーニングに注意を払う必要があります。

5、I / Oリソース

iostat -x > $DUMP_DIR/iostat.dump 2>&1
复制代码

一般的に、指向のサービスノードを計算するために、I / Oリソースがより正常になります。しかし、時にはまた、このような過度のログ出力などの問題、またはディスクの問題が発生します。各ディスクのこの基本的なコマンドの出力性能情報は、I / Oの問題をトラブルシューティングするために使用されます。

6、メモリの問題

free -h > $DUMP_DIR/free.dump 2>&1
复制代码

メモリーの問題は、より複雑で、この記事のxjjdogヒープ外の調査の概要を見ることができます興味を持っています。一般的に起こる問題は、私たちがセクションプロセスで説明し、JVMのメモリオーバーフローです。

freeコマンドは、オペレーティング・システム・メモリの一般的な概要を示すことができ、トラブルシューティングには、非常に重要なポイントです。

7、他のグローバル

 ps -ef > $DUMP_DIR/ps.dump 2>&1
dmesg > $DUMP_DIR/dmesg.dump 2>&1
sysctl -a > $DUMP_DIR/sysctl.dump 2>&1
复制代码

それはdmesgのために来るとき、他の記事のxjjdogでは、我々は複数回を持っています。dmesgの多くの静かな死最後のサービスは、手がかりを残しました。

もちろん、PSは、コマンドの実行の最高周波数として、それはいくつかの基準値であることをバインドされて、出力です。

カーネル構成パラメーターので、システムは非常に大きな影響を与えることになります。だから我々は出力を持っています。

プロセスのスナップショット、最後の言葉

1、Jinfoの

${JDK_BIN}jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1
复制代码

このコマンドが出力されます基本的なJavaプロセス情報。環境変数やパラメータを含みます。

2、GC情報

${JDK_BIN}jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1
${JDK_BIN}jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1
复制代码

jstatは出力電流のGC情報。一般的には、手がかりは、実質的に、ない場合、jmapはによって分析されることが分かります。

3、ヒープ情報

${JDK_BIN}jmap $PID > $DUMP_DIR/jmap.dump 2>&1
${JDK_BIN}jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1
${JDK_BIN}jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1
${JDK_BIN}jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null  2>&1
复制代码

jmapのは、現在のダンプ情報のjavaプロセスを取得します。上記のように、実際には、最も有用なのは、4番目のコマンドですが、あなたの前に3つのシステムの予備的な概要。グロス判断を下すことができます。

ファイルなので最初の4つのコマンドは、一般的に非常に大規模な生成しました。また、結果を得るためには、そのようなMATの詳細な分析としてインポートツールをダウンロードする必要があります。

4、実行スタック

${JDK_BIN}jstack $PID > $DUMP_DIR/jstack.dump 2>&1
复制代码

jstackは、実行スタックの時に取得します。通常、多くの倍の値は、一度私たちはここに来ます。この情報は、プロセス条件であなたのJavaスレッドを復元できることは非常に便利です。

top -Hp $PID -b -n 1 -c >  $DUMP_DIR/top-$PID.dump 2>&1
复制代码

より正確な情報を得るために、我々は、プロセス内のすべてのスレッドについての情報を取得するには、CPUをtopコマンドを使用します。この方法では、最終的にリソースを消費するどこかで見ることができます。

5、先進的な交換

kill -3 $PID
复制代码

時には、jstackを実行することはできません。ほとんど反応しないようにJavaプロセスとして多くの理由があります。私たちは、プロセスに終了-3信号を送信しようとします。この信号は、Javaプロセスがログファイルにトレース情報を出力しますjstack楽しんで。Jstackプログラムが代替です。

gcore -o $DUMP_DIR/core $PID
复制代码

jmapの問題のために行うことができないだけでなく、ベンチから、つまり、GDB成分がのgcore。これは、コア・ファイルを生成します。私たちは、ダンプを生成するには、次のコマンドを使用することができます

${JDK_BIN}jhsdb jmap --exe ${JDK}java  --core $DUMP_DIR/core --binaryheap
复制代码

状態および過渡状態の履歴

xjjdogここで二つの用語を作成します。瞬时态これは、要素のスナップショットの種類が起こったことをいう。历史态クローリングの周波数に応じて、固定された用語のビューの変化を監視するためのリソースを持っています。

また、ベースラインの問題があるため、これらの情報の多くは、CPU、メモリ、および他のそのようなシステム、直感的なほど良好ではない歴史への状態の瞬間状態の値として、があります。だから、より良く、より多くの意志クラスのシステム監視ツールがあるかどうか。

しかしなどlsofは、ヒープのために、これは混合メッセージのない時系列の概念ではない、便利な値を生成するために、監視システムを入力することはできません、それだけで過渡状態によって分析することができます。この場合、瞬時の状態より大きな値。

終わり

私は、プロセスの上に置くシェルスクリプトを書いてきました。あなたはgithubの上でそれを見つけることができます。オリジナルを見るために、左下隅をクリックして、それが満たすことができます。

https://github.com/sayhiai/shell
复制代码

多くの場合、予期せず、分散環境における障害の原因、これのあなたのスタンドアロン証拠が、それだけで表現であってもよいことに注目すべきです。それはうそませんでしたが、その背後にある意味は、多くの場合、間違ったブート問題の本質です。


私は良い感じ?それを奨励するために賞賛を指しています。

関連記事:
(a)の記事準備「キャスト・アウェイ」のLinuxの
Linuxののは、「キャスト・アウェイ」(b)のCPU記事
のLinuxの、「キャスト・アウェイ」(3)メモリチャプター
のLinuxの、「キャスト・アウェイ」(4)I / Oの章
のLinuxの、「キャスト・アウェイ」(5)ネットワークの記事
調査の概要外部のJavaヒープメモリ

おすすめ

転載: juejin.im/post/5d4908d351882521da68d463