Java 開発を行う学生にとって、JVM パフォーマンス最適化は習得するのが比較的難しい知識ポイントと言えます。これは、JVM パフォーマンスの最適化には難解な JVM の知識を習得する必要があるだけでなく、JVM パフォーマンスの最適化をシナリオで使用するのが難しいためでもあります。 このため、多くの人が JVM パフォーマンスの最適化に馴染みがなく、空中に浮かぶ手の届かない城のように感じています。最近、仕事で JVM パフォーマンスの最適化をいくつか行いました。これは JVM チューニングの初心者にとって非常に役立つと思います。 背景JVM が新世代と旧世代に分かれていることは周知の事実であり、アプリケーションの起動時に、アプリケーションを実行する JVM のメモリ サイズを調整するために、対応するパラメータを構成します。しかし、多くの場合、私たちは単に数字を大まかに見積もって、何気なく入力し、オンラインで調べていることを誰もが知っています。 筆者の会社もこのような状況です。 JVM のメモリ サイズは通常、かなり大きく設定されます。結局、メモリオーバーフローよりもメモリが多い方が良いので、多くのメモリの無駄が発生します。したがって、著者が受けたタスクは、すべてのアプリケーションをチェックし、適切なメモリ パラメータを調整し、JVM パフォーマンスを最適化することでした。 実践的なチューニングアプリケーションの JVM パフォーマンスを調整するには、まずその実行方法を知る必要があります。これはちょうど病院に行って医者に診てもらうようなものです。薬を処方する前に、医師は患者を観察し、匂いを嗅ぎ、質問し、触診する必要があります。 Java では、JDK が提供するさまざまなコマンドなど、JVM の内部状況を観察する方法が多数あります。筆者の会社では監視に Prometheus を使用しているため、アプリケーションの JVM 実行状態を Prometheus 上で直接確認できます。 Prometheus パネルには、JVM に関連する主なコンテンツが 4 つあります: JVM Misc、JVM メモリ プール (ヒープ)、JVM メモリ プール (非ヒープ)、およびガベージ コレクションです。今回私たちにとってより関連性が高いのは、JVM メモリ プール (ヒープ) とガベージ コレクションです。 JVM メモリ プール (ヒープ) には、主に新世代の Survivor 領域、Eden Space 領域、旧世代を含む JVM ヒープ メモリの使用状況が表示されます。 JVM メモリ プール (ヒープ) ガベージ コレクションでは、ガベージ コレクションの頻度 (ops は 1 秒あたりのガベージ コレクションの回数を示し、0.5 が通常適切な値です)、各 GC 一時停止の期間 (通常 80 ミリ秒以下が適切な値です)、新しい世代に割り当てられたメモリ/古い世代に昇格されたメモリなど、JVM のガベージ コレクションの状態が表示されます。 ガベージコレクション JVM のパフォーマンスを最適化したい場合、最も簡単な方法は、ガベージ コレクションの GC 頻度と一時停止時間を観察して、アプリケーションのメモリ利用効率を大まかに判断することです。次に、これら 2 つの値の実際の状況に応じて、それらを適切な範囲に調整し、JVM の使用率を向上させます。 アプリケーションの GC 頻度が 0.02、つまり 1 秒あたり 0.02 GC しかない場合、1 回の GC に 50 秒かかるため、その GC 頻度は非常に低くなります。このとき、より大きな新世代のスペースが割り当てられる可能性があり、GC が必要になるまでに長い時間がかかります。このとき、一時停止時間に注目します。一時停止時間も短い場合は、アプリケーションのメモリを最適化する余地があると判断できます。 この場合、新しい世代に割り当てられるスペースは通常削減されます。新しい世代のスペースが小さくなると、割り当てにかかる時間が短縮されます。スペースが割り当てられると、GC 操作が開始されます。その結果、GC の数が増加し、アプリケーションのメモリ使用率が向上します。 メモリ空間を調整する場合、急激なメモリ変動による問題を回避するために、通常は小さなステップで調整を行います。まずは少しだけ調整してみて、大きな問題がなければ目標値に調整してください。結局のところ、これは本番環境です。何か問題が起きたら逃げなければならなくなるので、用心した方が良いです! これを見ると、誰もが何をすべきか分かるはずだと私は信じています。次のステップは、JVM メモリ空間の 3 つのパラメータ (-Xmx -Xms -Xmn) を調整して、GC 頻度と GC 一時停止時間を適切な範囲内に保つことです。 アプリケーションレベルの最適化GC 頻度と GC 一時停止時間に加えて、アプリケーションの種類に基づいて JVM メモリ消費量を分析することもできます。 例えば、インターフェース型のシステムの場合、多くのリクエストは 1 秒以内に完了します。このタイプのリクエストの場合、アプリケーションに入るときにメモリが割り当てられ、終了するとメモリがすぐに再利用されるため、残るオブジェクトはごくわずかです。このタイプのアプリケーションの JVM メモリ状況は、おおよそ次のようになります。新しい世代は大量のメモリを消費し、定期的にメモリを再利用しますが、古い世代はメモリをあまり消費しません。 長時間に渡るアプリケーション処理など、継続的な処理が必要なアプリケーション向け。生存時間が長いため、より多くのオブジェクトが古い世代に昇格される可能性があり、古い世代のメモリ消費量は比較的大きくなります。 JVM の新しい世代と古い世代のメモリ消費量を観察することで、アプリケーション自体の特性と組み合わせて、アプリケーション内の不合理な領域を見つけ、ターゲットを絞ってアプリケーションを最適化できます。たとえば、大量の一時データが毎回アプリケーション内のどこかのコンテンツに保存され、JVM が GC に突入してアプリケーションの遅延が発生する可能性があります。 要約するこの記事のチューニング方法を要約すると、GC の頻度と一時停止時間を観察して、JVM のメモリ領域を調整し、最も適切な状態を実現します。オンライン サービスに影響を与える可能性のあるメモリの急激な変動を回避するために、調整プロセス中に小さなステップを踏むことを忘れないでください。これは実際には JVM パフォーマンスを調整する最も簡単な方法であり、大まかな調整と見なすことができます。しかし、JVM パフォーマンス チューニングにはより詳細なパラメーターが存在するため、機会があれば後ほどそれらについて説明します。 さらに、JVM の新しい世代と古い世代を観察することで、アプリケーションをターゲットに最適化し、アプリケーション自体のパフォーマンスを向上させることもできます。 これまでに JVM の基本的な理論的知識を学習したことがない場合、この記事を理解できない可能性があります。次に、私の「JVM 基礎入門シリーズ」を読むことをお勧めします。記事は最も単純なものから最も複雑なものまで段階的に説明されており、JVM を感覚的に理解することができます。この記事を読んだら、きっと啓発された気分になるでしょう! JVM 基礎入門シリーズ ポータル: JVM 基礎入門シリーズ JVM パフォーマンス チューニングについては以上です。 この記事はWeChatの公式アカウント「陳淑宜」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、陳淑易の公式アカウントまでご連絡ください。 |
<<: Flux+Flagger+Istio+Kubernetes を使用して GitOps クラウドネイティブ プログレッシブ (カナリア) 配信を実装する
>>: [Sticky JVM] JVM チューニングとは何ですか?
errantwebは2017年1月に設立されました。価格が安く、リソースが豊富です。データセンターは...
義務教育を数年受けた後、私はついに試験について心配しなくなりました。これは私が大学に行ってから一番感...
新年には、検索エンジンはスパムコンテンツの処理と判断においてますます正確になり、その処理は非常に厳格...
2000 年に設立された ChinaNetCenter は、世界 70 を超える国と地域で事業を展開...
Imidc の香港、台湾、日本のデータセンターでは、独立サーバーの特別プロモーションを同時に実施して...
Egihosting は、特別価格のプロモーション独立サーバーをいくつかリリースしました。コンピュー...
2019 年におけるさまざまな交通メディアのパフォーマンスはどうでしたか? Tik Tokのショート...
ウェブマスターさん、SEO とランキングについてお聞きします。何を思い浮かべますか? いくつかのキー...
過去2年間、オンラインオーディオ業界の競争はますます激しくなっています。一方では、インターネット大手...
vsys.host は現在、独自のウクライナ専用サーバーの特別プロモーションを実施しており、価格は月...
A5ウェブマスターネットワーク(www.admin5.com)は6月6日、中国で共同購入が5年にわた...
Jumei IPOの嘘:モバイルデータの49%が誇張されていたファイナンシャルウィークリー研修記者 ...
iniz.com のシンガポール VPS は、実は数日前から市場に出回っているのですが、迂回問題のた...
ovhはどうですか?ドイツはどうですか?ドイツはヨーロッパのコアネットワークハブと考えられているため...
ミニプログラムの動作ロジックの観点から見ると、プラットフォームに寄生しており、プラットフォームのトラ...