「Javaアプリケーションのレイテンシー削減」

「美容とファッションのエキスパートが贈る、Javaアプリケーションのレイテンシー削減術」

私がアプリケーション開発のキャリアで取り組んだ難解で曖昧な問題の一つは、分散データ取得アプリケーションのレイテンシを改善することでした。

これは、最大の小売ウェブサイトの1つで製品広告を提供するために使用されるコンテナ化されたJavaアプリケーションでした。アイデアはレイテンシを低減して、特に高度な機械学習モデルを実行して試験することで、より良い広告を顧客に提供するための追加処理の余地を提供することでした。

私が使用したテクニックの一つは、JVMメモリ使用状況周りの活動に対する洞察を得るためのメモリ解析でした。些細なことのように聞こえるかもしれませんが、私は解決に時間がかかる大きな障壁を発見しました。結果として、それぞれの問題を克服し、アプリケーションのp99レイテンシを400msから240msに減少させることができました。

レイテンシの低減は私にとって新しいチャレンジであり、それに対処するための最適なツールが必要でした。オープンソースと有料の両方の多くのツールが利用可能でしたが、私は無料の中でもeclipseメモリ解析ツールMATが最も便利だと感じました。MATのインストールと使用方法については、多くの記事がありますので、ここでは詳細には触れません。

この記事では、大規模なプロダクションアプリケーションのメモリ解析に関連する課題とそれらの克服方法について説明します。

課題

  1. 大規模なアプリケーションのJVMヒープメモリのフットプリントは非常に大きく、私の場合は約100GBでした。このような大きなヒープダンプを解析するには、解析ツールを実行するために多くのメモリが必要であり、通常は通常のノートパソコンでは遅くなります。
  2. 大規模なヒープダンプは同等のディスクスペースを消費します。ディスクに十分なスペースがない場合、ヒープダンプのコマンドは失敗し、最悪の場合はルートパーティションを埋めてホストをクラッシュさせる可能性があります。
  3. ヒープダンプはストップ・ザ・ワールドのイベントです。ヒープダンプを取ると、アプリケーション内のすべてのアクティビティが停止し、サービスのヘルスチェックの失敗や終了につながる可能性があり、ヒープダンプファイルを取得することが困難になります。

解決策

  1. 大規模なヒープダンプの場合は、AWS EC2などの十分なメモリとディスクスペースを持つクラウドベースのリソースを使用することが最適です。
  2. ディスクスペースの問題を解決するには、アプリケーションがいくつかのクラウドリソースで実行されている場合、通常はそれに別のストレージが接続されています。ヒープダンプを取る前に、別のストレージを増やすことができます。
  3. アプリケーションが定期的なヘルスチェックで監視されているかどうかを確認します。たとえば、ロードバランサーの一部である場合は、ヒープダンプコマンドが開始された後に終了されないように、提供フリートから外す必要があります。
  4. 一定の間隔で複数のヒープダンプを取得して、サービスの状態の変化をキャプチャします。

改善策

  1. 最大の原因の一つは、インメモリキャッシュであり、過剰な保持ヒープを引き起こし、レイテンシに影響を与える頻繁なガベージコレクションを引き起こしていました。
  2. メモリ解析によって、データの検索に使用されるデータインデックスの使用方法に関する重要な手がかりが得られました。全体のインデックスがJVMヒープにロードされていて、またtmpfsに保存されており、必要なメモリの2倍を使用していたことがわかりました。これは不要であり、頻繁なガベージコレクションも引き起こしていました。

結論

大規模なプロダクションアプリケーションのメモリ解析は重要です。

アプリケーション内でのデータのキャッシュは有用かもしれませんが、時間の経過に伴う悪化については注意深く監視する必要があります。

ヒープダンプ解析は強力なツールです。正しいマシンとツールを使用すれば痛みが伴うこともあります。

ヒープダンプを取る際は、プロダクションアプリケーションのヘルスチェックルーティンに注意して、同じものを正常に収集する必要があります。

この記事では詳細には触れませんでしたが、より詳しい情報が必要な場合は、お気軽にメッセージを送ってください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

ID対マルチモーダル推奨システム:転移学習の視点

この記事は、移転可能な推薦システムの開発状況と代表的な作業(IDベース、モダリティベース、および大規模言語モデルベース...

AI研究

「Googleの研究者が球面上でのディープラーニングのためのJAX向けのオープンソースライブラリを紹介します」

ディープラーニングは、入力から複雑な表現を自動的に学習する機械学習の一部です。その応用は、言語処理のための画像と音声...

AI研究

この脳AIの研究では、安定した拡散を用いて脳波から画像を再現します

人間の視覚システムと似たように、世界を見て認識する人工システムを構築することは、コンピュータビジョンの重要な目標です...

データサイエンス

「ワイルドワイルドRAG…(パート1)」

「RAG(Retrieval-Augmented Generation)は、外部の知識源を取り込むことで言語モデルによって生成された応答の品質を向上さ...

機械学習

マイクロソフトが「オルカ2」をリリース:特製のトレーニング戦略で小さな言語モデルに高度な推論を導入

LLMs(Large Language Models)は、人間の言語に似た言語を理解し生成するために膨大なテキストデータでトレーニングを受けま...

機械学習

ショッピファイの製品推奨アプリに生成AIを導入する

ショッピファイの製品推薦アプリケーションであるSearch and DiscoveryにジェネレーティブAIがどのように実装されたかについ...