JVM パフォーマンスの最適化は難しいと聞きました。今日試してみました!

JVM パフォーマンスの最適化は難しいと聞きました。今日試してみました!

[[403396]]

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 チューニングとは何ですか?

推薦する

中国ブログネットワークは本日、すべての無料ブログを閉鎖します

中国国際放送、北京、3月31日(劉楽記者)中国国営ラジオ「CNRニュース」の報道によると、中国ブログ...

ウェブサイトの最適化はゼロから始める必要があります

過去 1 か月間の経験を少しまとめました。現在の会社に入社してから、ウェブサイトの最適化やプロモーシ...

ブラックフライデー「専用サーバー」情報まとめ、今年一番安い専用サーバー!

海外独立サーバー(海外独立サーバー)を安く買うならブラックフライデーの時期がベストかもしれません。商...

ウェブサイト運営のための徹底的かつ効果的な競合分析の実施方法

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

faconhostはどうですか?オランダの VPS の簡単なレビュー (複数の強化機能付き: Ryzen 9 7950X、AS4809、AS9929)

英国で新たに登録された海外VPS業者として、faconhostの最初のデータセンターはオランダのアム...

A5年末レビュー: 2013年のモバイルインターネットで何が起こったか

はじめに:いつの間にか、時間は静かに過ぎていきます。あっという間に、2013 年も終わりを迎えます。...

Burst - サーバー最大 75% オフ (Xeon 3050 / E6500 - 34 ドル、i7-2600 - 64 ドル)

これは Burst でこれまで見た中で最高の割引であり、専用サーバー向けです。データセンターはペンシ...

深センガスとテンセントはコラボレーションプラットフォームをアップグレードし、7,500人の従業員をカバー

深センのスマートガス建設は段階的に進展している。 1月12日、深センガスとテンセントはスマートコラボ...

すべてのSEOウェブサイトにはコンバージョンページが必要です

数年にわたり SEO に携わってきたベテランにとって、ランキングは最も難しいことではありません。最も...

新しいウェブサイトの所有者が最初の月にやるべきこと

2か月間インターネットに熱心に取り組んで、成果が出始めました!Webサイト構築の最初の1か月で何をし...

全能ではない:WeChat O2Oはまだ単なる話

戦争について書面で語ることは軍事戦略においては大きなタブーである。ビジネスは戦場のようなものです。自...

注: 今年最後の乾物、特別オファーの整理 - 仮想ホスト/VPS/サーバー

今年ももうすぐ終わり、クリスマスとボクシングデーが次々とやって来ます。今年最後の時期に、皆様ができる...

ウェブサイトの内部リンクの最適化といくつかの一般的な構造最適化手法

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですインターネットの海で何年も過ごし...

pzea: アジア、香港(沙田 + 将軍澳)\シンガポール\日本(東京 + 大阪)の VPS が 20% オフ

pzea、このブランドは多くの人が知っています。主にアジアでVPSを運営しており、中国の香港、日本の...

anynode-7 USD/KVM/1 GB RAM/50 GB HDD/1 TB トラフィック

anynode の KVM が販売中です。オペレーティング システムには、一般的な Linux、BS...