オンライン問題レビュー、JVM Fast Throw のストーリー

オンライン問題レビュー、JVM Fast Throw のストーリー

[[394549]]

まず第一に、これは JVM の基盤となる最適化に関するいくつかの知識ポイントに関係する悲しい話です。初めてこのような問題に遭遇したときのことを振り返ってみると、「必要なときに十分な知識を持っていなかったことを後悔するだけだ」という古い格言があることに気付きました。

夜8時頃、担当メッセージセンターの運用保守グループから、多数のユーザーがテキストメッセージを受信できないとの報告がありました。 Kibana にログインして、対応するエラー ログを検索すると、多数の添え字範囲外例外が見つかります。

その時点でオンラインの問題は修正されました。ただし、問題が発生した場合は、その原因を突き止めなければなりません。そうしないと、次回に再び問題が発生する可能性があります。

ELK 上でログ分析を実行するのは不便であり、対応する例外に基づいて異なる緯度で統計分析を実行することは困難であるため、運用保守スタッフに連絡して、障害が発生した日の情報ログとエラー ログを取得してオフライン分析を行いました。

ログ分析の結果、異常な出力には 2 種類あることがわかりました。 1 つのタイプには次のようなスタック情報があります。

  1. java.lang.ArrayIndexOutOfBoundsException: -1
  2. ...スタック情報を省略

もう 1 つはさらに奇妙で、例外のみがあり、対応するスタック情報がありません。

  1. java.lang.ArrayIndexOutOfBoundsException: null  

最初のタイプの問題は見つけやすいです。例外スタック情報に基づいて、特定のコードが特定され、直接修復されます。 2番目のタイプの問題はより困難です。

実は、この 2 つは例外であり、後でそれがわかるようになります。その後私がしたことはすべて、2つのことを明確にするためでした。

  • 例外メッセージに null が出力されるのはなぜですか?
  • スタック情報が出力されないのはなぜですか?

JVM 高速スロー

ファストスローとは何ですか?

簡単に言えば、一部の例外タイプ (null ポインター、範囲外の添え字、算術演算など) がコード内の固定の場所で複数回スローされると、仮想マシン (HotSpot VM) は一致するタイプの事前に割り当てられた例外オブジェクトを直接スローします。この例外オブジェクトのメッセージとスタック トレースは両方とも空です。

これを読んだ後、読者は同じ例外が異なるログを出力する理由を理解したと思います。同じ場所で例外が複数回スローされるため、JVM は事前に割り当てられた例外をスローし、メッセージとスタック トレースが取り込まれます。

サーバー VM のコンパイラは、すべての「コールド」組み込み例外に対して正しいスタック バックトレースを提供するようになりました。パフォーマンス上の理由から、このような例外が数回スローされた場合、メソッドが再コンパイルされることがあります。再コンパイル後、コンパイラはスタック トレースを提供しない事前割り当て例外を使用するより高速な戦術を選択する場合があります。事前に割り当てられた例外の使用を完全に無効にするには、この新しいフラグを使用します: -XX:-OmitStackTraceInFastThrow。

この状況は、JDK 1.5 のリリース ドキュメントに記載されています。この最適化の理由はパフォーマンスを向上させるためです。同じ例外が同じ場所で複数回スローされた場合、コンパイラはメソッドを再コンパイルします。再コンパイル後、コンパイラはスタック トレースを提供しない事前割り当て例外を使用するより高速な戦略を選択する場合があります。

この事前割り当て例外メカニズムをオフにする場合は、-XX:-OmitStackTraceInFastThrow を使用できます。興味のある読者はリリースノートをご覧ください: https://sourl.cn/PMzVkC

さらに、JVM ソース コードによると、Fast Throw メカニズムは現在、次のスクリーンショットに示すように 5 つの異常な状況をサポートしています。

高速投球のシミュレーション

上記はすべて理論的な部分です。この章ではコードを使用して練習します。

  1. リスト<String> list = new ArrayList();
  2. ( int j = 0; j < 10000; j++)の場合{
  3. 試す {
  4. リストを取得します(-1);
  5. } catch (例外例) {
  6. int長さ = ex.getStackTrace().length;
  7. システム。 out .println(String.format( "例外エラー:: %s、スタック長:: %s" 、ex、length));
  8. }
  9. }

上記のプログラムは Java 8 環境で実行されます。プログラムを実行した結果から、Fast Throw は Java 8 でも依然として有効であることがわかります。

特別な状況がない場合は、この機能をオフにしないことをお勧めします。インターフェースの同時実行量が大きい場合、プログラムのバグにより、多数のリクエストが同じコードで例外をスローする可能性があり、Fast Throw メカニズムによってパフォーマンスの低下を大幅に防ぐことができます。シングルスレッドのテストデモでは、異常な呼び出しが多いほどパフォーマンスの差が大きくなることがわかっています。

高速スローを有効にするファストスローをオフにする
10w 1004ミリ秒 3547ミリ秒
100ワット 6193ミリ秒 30928ミリ秒
500ワット 37492ミリ秒 ...

オンライン環境が Fast Throw メカニズムをトリガーした場合、同じ場所と同じ例外を持つログを遡って、問題の原因を突き止めることができます。

結論

これらすべての言葉を 1 つの文にまとめると、「リファクタリングはリスクを伴うため、オンラインで起動する際には注意が必要です。」

公共機能の再構築には、あらゆるテストケースを組み込む必要があります。問題の出力背景を極限まで考慮するか、需要背景を周囲の同僚に説明する必要があります。一緒に考えることで、極端な問題の発生を大幅に回避できます。

必要なストレス テストは非常に重要であり、事前に大量のトラフィックが発生した場合にのみ発生する問題を明らかにすることができます。

障害の発生の重要性は良い面と悪い面の両方があります。悪い点は誰もが知っています。良い点は、当然ながらオンラインでの問題のトラブルシューティングの経験を積むことです。こうすることで、後で会社の女の子が同じ問題に遭遇したときに、彼女は叫ぶでしょう。「女の子、そのバグは放して、私にやらせてください!」

<<:  「MQ シリーズをマスターする」 - カフカの Ren 子午線と Du 子午線を開く

>>:  Pulsar: 次世代メッセージング エンジンは本当にそれほど強力なのでしょうか?

推薦する

クラウド移行を成功させるための 12 の重要なステップ

多くの企業がさまざまな理由からワークロードをクラウドに移行しています。パブリック クラウドは、ほとん...

Serverhub - 3.99 USD/1G メモリ/65G ハードディスク/1T トラフィック

Serverhub は、米国西海岸フェニックスにある有名なコンピュータセンターです。優れた立地と優れ...

SEOにおけるウェブサイト構造の大きな役割を分析する

ウェブサイトの構造は、その性質に応じて論理構造と物理構造に分けられ、ウェブサイト内のページ間の階層関...

推奨: $79/Burst-L5520/24G メモリ/1T ハードディスク/5T トラフィック/5IP/IPMI

Burst は、ダラス、ロサンゼルス、マイアミ、スクラントンに複数のデータセンターを持つ、非常にコス...

SEO ROI を向上させる 4 つの方法

最新のマーケティング手法では、キャンペーンのあらゆるステップで ROI を追跡できます。つまり、RO...

最高レベルのSEO:ユーザーエクスペリエンスの価値を最大化

SEO の最高レベルは、ユーザー エクスペリエンスの価値を最大化することです。私は 4 年間 SEO...

ウェブマスターに優しいリンク交換は、一石二鳥の効果的な方法です

友好的なリンクの交換は、すべてのウェブマスターが必然的に遭遇するものです。ウェブマスターは、リンク交...

SEO業界の長所と短所についてもう一度話しましょう

SEO 業界は、誰もが独自の意見を持っている業界です。最近、SEO に関するさまざまな意見が出ていま...

マルチクラウド環境におけるリスク管理

企業が業務を複数のパブリック クラウドに移行するにつれて、リスクも変化します。企業は、マルチクラウド...

キーワードランキングを決定するいくつかの要素についての簡単な説明

ウェブサイトの場合、キーワードのランキングを決定する要素は多数あります。おそらく、この点に関して、ス...

エッジコンピューティング時代の到来は AI にどのような影響を与えるのでしょうか?

[[270834]]近年、テクノロジー界では人工知能が注目されている分野となっている。中国では近年、...

福建省南平市でのオンラインねずみ講の捜査:金銭から金を儲けることは公然のゲームになっている

ハン・ヤンミン編集者注/勇気を出して戦い、勝利する福建省の人々は、常に中国のビジネスマンの模範となっ...

ウェブサイト最適化戦略には何が含まれますか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています今日のイン...

クラウド コンピューティングのよくある 7 つの問題とその解決方法

[[389544]]業界の専門家は、クラウド コンピューティング テクノロジーにより、組織が大規模な...