2基本操作のトラブルシューティングJava仮想マシンのオンライン、あなたは知っていますか?

序文

バックエンドプログラマにとって、特にJavaプログラマの観点から、トラブルシューティングラインの問題は避けられません。彪ように様々な高CPU、メモリオーバーフロー、頻繁にGCと、これらは非常に疑問頭痛です。家主はまた、彼らはそれを解決する方法に発生した問題を、これらの問題を、遭遇しましたか?

まず、問題は確かに最初の問題の原因を分析し、その後、問題を特定し、問題を解決し、そして最後に次回を防ぐために、合計する必要があり、そこにあります。

今日の記事のトピック私たちは、基本的な操作について話し好きなように、それは、ラインの問題のトラブルシューティングを行うための基本的な方法のいくつかです。なぜあなたは言うのですか?オンライン問題奇妙な、でも戦い硬化の専門家は、困難な問題が発生しますので、記事に終了することは不可能であるが、最も重要な理由は、もちろん、家主のレベルが所定の位置にないからです。

場所に行っていない場所ではありませんが、どんな経験が記録の価値があるので、家主が、これらの問題について記録する必要があります。

また、このような環境の調査は、Linuxです。

V2-dbba0d1f0b00ddd159a65f527dea560c_b.png

高いCPU彪

オンライン高いCPU彪の質問は、私たちはすべての問題を見つけるためにどのようにして、満たされる必要がありますか?

アイデア:あなたは複数のサーバーJVMプロセスを持っているので、まず、Javaプロセスの高CPU彪を見つけます。そして、「質問スレッド」というプロセスを見つけ、そして最終的にスレッドスタック情報に基づいて、問題のコードを発見しました。最後に、コードの調査。

それがどのように動作しますか?

  1. topコマンドにより、CPUの消費量が最も高いプロセスを検索し、プロセスIDを覚えておきます。

  2. 最高スレッドID、スレッドIDのCPU消費量を見つけ、再びトップ-HP [プロセスID]で覚えておいてください。

  3. 指定したファイルにJDKが提供するjstackツールダンプスレッドスタック情報。特定のコマンド:jstack -l [プロセスID]> jstack.log。

  4. スレッドIDは10進数の理由だけで、スレッドIDの情報は16進数でスタックので、我々は10進数16進数に変換する必要がある、とスレッドIDを持つスタックを見てください。使用のprintf「%xとの\ nを」[進数]は、あなたが16進数に小数を変換することができます。

  5. ただ変換による16進数でスタック情報から、対応するスレッド・スタックを検索します。これは、スタックから識別することができます。

ビューの家主の立場の経験から、一般的にビジネスサイクルで死ん輸出ではありません、このような状況では、サービスに応じて修理することができます。また、CPUのC2コンパイラコンパイル時にそこつかむだろう、C2コンパイラは何をされますか?Javaコードの一定期間は、実行(デフォルト)の10,000を超える数倍された後に、このセクションでは、速度を改善するために、マシンコードにコンパイルされ、コンパイラ実装から変更されたコードの実行を説明します。そして、このC2コンパイラはまさにそれを行います。どのようにそれを解決するには?そのようなリアルタイムアクセスなどのユーザーは、C2コンパイラがアプリケーションに干渉しないようにオンラインプロジェクトの後、あなたは、圧力測定ツールを予熱することによって開始することができます。GCスレッドその後、鉛、最も可能性の高いフル・GC場合は、GCを最適化する必要があります。

v2-76e7a53386145e39b0e478d933aedd76_b.png

メモリのトラブルシューティング

Javaのメモリ管理のGCによるので、トラブルシューティングのCPUを終え、捜査のメモリは、一般的に、GCのメモリの問題が問題である、と言います。2例がありますが、一つはメモリ不足である、と誰もが、メモリオーバーフローはありませんが、GC不健康。

出力ダンプ・ファイル、プログラムメモリオーバーフロー:効果がある+ HeapDumpOnOutOfMemoryErrorパラメータを、-XX:を追加することにより、メモリ・オーバーフロー。

ダンプ・ファイルは、一般的に使用されるMATとしてダンプ分析ツールを介して分析することができると共に、Jprofile、jvisualvmおよびその他のツールを分析することができ、これらのツールは、最終的に見ることができるオブジェクトの数が多い等作成どこオーバーフロー、です。

後者の場合は、より複雑です。GCの健康上の問題。

通常、健康的なGCはそれを述べる何ですか?ない50以上のミリ秒、好ましくはFGCのYGC 5秒程度家主の経験、CMS GC一日一回かそこら。

GCの最適化は、二次元、一つの周波数、及び第二長を有します。

私たちは、まず大きすぎ、容量を減らす必要があり、周波数が高い場合には、エデンの領域を示すことは小さすぎる、あなたはエデンの面積を増加させることができているシステムメモリを示す、周波数でYGC場合は5秒以上に一度、あるいは長く見える、YGCを見て、しかし全体の新入生は、発電スタックの容量の30%であるべきである - 40%の間、エデン、および8からなるように比率:1:約1、この比は、オブジェクト促進の大きさに応じて調整することができます。

如果 YGC 时间过长呢?YGC 有2个过程,一个是扫描,一个是复制,通常扫描速度很快,复制速度相比而言要慢一些,如果每次都有大量对象要复制,就会将 STW 时间延长,还有一个情况就是 StringTable ,这个数据结构中存储着 String.intern 方法返回的常连池的引用,YGC 每次都会扫描这个数据结构(HashTable),如果这个数据结构很大,且没有经过 FGC,那么也会拉长 STW 时长,还有一种情况就是操作系统的虚拟内存,当 GC 时正巧操作系统正在交换内存,也会拉长 STW 时长。

再来看看FGC,实际上,FGC 我们只能优化频率,无法优化时长,因为这个时长无法控制。如何优化频率呢?

首先,FGC 的原因有几个,

1 是 Old 区内存不够,

2 是元数据区内存不够,

3 是 System.gc(),

4 是 jmap 或者 jcmd,

5 是CMS Promotion failed 或者 concurrent mode failure,

6 JVM 基于悲观策略认为这次 YGC 后 Old 区无法容纳晋升的对象,因此取消 YGC,提前 FGC。

通常优化的点是 Old 区内存不够导致 FGC。如果 FGC 后还有大量对象,说明 Old 区过小,应该扩大 Old 区,如果 FGC 后效果很好,说明 Old 区存在了大量短命的对象,优化的点应该是让这些对象在新生代就被 YGC 掉,通常的做法是增大新生代,如果有大而短命的对象,通过参数设置对象的大小,不要让这些对象进入 Old 区,还需要检查晋升年龄是否过小。如果 YGC 后,有大量对象因为无法进入 Survivor 区从而提前晋升,这时应该增大 Survivor 区,但不宜太大。

上面说的都是优化的思路,我们也需要一些工具知道 GC 的状况。

JDKは、このようなjcmdなどjmapは、などのツールの数を提供しjcmd jmapのは、本当に多くの機能を置き換えることができますので、Oracleの関係者は、代わりにjmapはのjcmdお勧めします。jmapのは、あなたはjmapのとjcmdダンプ・ファイルは、FGCをトリガーする際に、シーンに注意を払うために時間を使うことに注意して、ファイルをダンプすることができ、配信情報オブジェクトを印刷することができます。

ツールはからなので、上の古いと、に、そのようなエデンのメモリ使用領域として、GCの詳細を表示することができ、一般的に使用されるツールはJSTATでもあります。

別のツールは、ツールが現在のJVMパラメータを表示することができ、かつ機械を停止せずにパラメータを変更することができ、Jinfoのです。

私たちの一部のアナリストは、ダンプ・ファイルの可視化ツールを言うの上、MAT、Jprofile、jvisualvmなどを含むこれらのツールは、問題を特定することは通常でき、より多くのメモリを使用するためにどのオブジェクトを参照するためにファイルをダウンダンプjmapのを分析することができます。
I種類の公共のホ[プログラマ]の懸念へようこそドキュメントが内側になり、記事の冒頭は、内側に更新されますマークします。

別の非常に重要な点は、オンライン環境がGCログを取らなければならないということです!

v2-94201fbb2e0a7fe9421acc623682351a_b.png

概要

記事のタイトルに基づいて、これは私たちの基本的な操作で、トラブルシューティングのトピックについて話をたくさんされ、それぞれの故障の知識も多くに関与しているので、私たちは捜査の基本を学び、その後、まだ、多くの事故調査技術を習得する必要があります例えば、調査IO、ネットワーク、TCP接続、およびように。家主これらの基本的な操作は、後の記事で記録されています。

遂に

サポートのおかげで、ヨーヨーの記事を覚えて賞賛のポイントのように、みんなと共有へようこそ!


おすすめ

転載: blog.51cto.com/14442094/2445826