検索
ニュース

Microsoftは、Microsoft Azureの本番環境で起きるメモリリークの問題にどう対処しているのかメモリリークを検出、対処する「RESIN」を解説

Microsoftは、Microsoft Azureを提供する上でサービス品質に影響を及ぼすメモリリークの問題にどう対処しているのか。本番環境で稼働しているメモリリーク検出サービス「RESIN」の取り組みを解説した。

Share
Tweet
LINE
Hatena

 Microsoftは2024年4月8日(米国時間)、Microsoft Azureの本番環境で起きるメモリリークの問題にどう取り組んでいるのか、公式ブログで解説した。

 Microsoftは、Azureの本番環境で起きるメモリリークに総合的に対処するメモリリーク検出サービス「RESIN」を開発し、活用している。メモリリークがクラウドインフラに与える影響と、従来の検出手法における課題やRESINを活用して得られた成果を次のように解説している。

メモリリークは何が問題なのか 従来の検出アプローチや大規模環境ならではの課題とは

 インフラにおけるメモリリークはパフォーマンス、安定性、最終的にはユーザー体験に影響を与える問題だ。メモリリークが起きると、コンポーネントのパフォーマンスが低下し、OSのクラッシュや同じマシンで実行されている他のプロセスの遅延、停止につながることもある。

 メモリリーク検出を巡っては、多くの研究と解決策が存在する。従来の検出手法は、静的検出と動的検出の2種類に分けられる。静的検出ではソフトウェアのソースコードを分析してメモリリークを推定する。動的手法ではプログラムに監視機能を組み込み、実行時のオブジェクト参照を追跡してメモリリークを発見する。

 静的検出の場合、コンポーネント間の依存関係によるメモリリークを正確に検出することが難しく、動的検出では、プログラムに多くのコードを追加するため、プログラムやクラウドサービス上のオーバーヘッドにつながる。また大規模クラウドインフラにおいてメモリリーク検出アルゴリズムを実装する場合、以下のような課題もあったという。

  • しきい値を用いる場合、ワークロードの変動や環境内の干渉によるノイズもあり検出が困難
  • 本番環境におけるメモリリークは、数日から数週間、数カ月にわたる長期間の「fail-slow」障害であり、逐次的な変化をタイムリーに捉えるのが難しい
  • Azureのようなグローバル規模で、長期間にわたる詳細なデータ収集は現実的ではない

RESINの導入

 そこでMicrosoftは、中央集権的アプローチでメモリリークの問題を検出し、緩和策を実行するRESINを開発、導入した。RESINでは、前述した課題を踏まえ、2段階に分けてメモリリーク検出のアルゴリズムを実装している。

 まず、システム全体でのメモリ使用量を幾つかのグループ(バケット)に分類してコンポーネントごとに異常が発生していないかどうかを調査する。

 バケット内のデータから通常とは異なるコンポーネントの挙動が確認された場合、バケットに関連するホスト数を考慮して、重大度スコアを算出する。続いて、そのコンポーネントのプロセス粒度で調査を開始する。これにより、メモリリークの疑わしいプロセスおよび開始時刻と終了時刻、重大度スコアが出力される。

メモリリークの原因調査と対処

 メモリリークが検出されると、RESINは実行中のアプリケーションが参照する全てのメモリ割り当てを含むヒープスナップショットを取得し、検出されたリークの根本原因を特定する。特定後、RESINは顧客への影響を最小限に抑えるため、ルールベースのデシジョンツリーを使用し、緩和アクションを選択する。

 メモリリークが単一のプロセスまたはWindowsサービスに限定されている場合、RESINは、最も軽い緩和策としてプロセスまたはサービスの再起動を試みる。OSの再起動でも、ソフトウェアのメモリリークを解消できるが、時間がかかる。また仮想マシン(VM)のダウンタイムを引き起こす可能性があるため、通常は最後の手段となる。

 ホストが空でない場合、RESINは、ユーザーへの影響を最小限に抑えるため「Project Tardigrade」などのソリューションを利用し、ハードウェアの初期化をスキップし、VMのライブマイグレーション後にカーネルのソフト再起動のみを実行する。ソフト再起動が効果的でない場合のみ、完全なOS再起動が実行される。

 メモリリークが解消されたと判断すると、RESINはターゲットへの緩和アクションの適用を停止する。

RESINのワークフロー(提供:Microsoft)
RESINのワークフロー(提供:Microsoft)

RESINの効果

 RESINは2018年後半からAzureで本番稼働しており、現在までに数百万のホストノードと数百のホストプロセスを毎日監視するために使用されている。監視するクラウドインフラの規模が急速に拡大しているにもかかわらず、メモリリーク検出で85%の精度と91%の再現率を達成したという。

 RESINの成果は、クラウドサービスの安定性と品質を向上させる重要なステップだと、Microsoftは述べている。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る