次の方法で共有


Linux Azure 仮想マシンでメモリ不足エラーが発生する

適用対象: ✔️ Linux VM

元の KB 番号: 4010058

この記事では、Linux オペレーティング システム (OS) を実行する Microsoft Azure 仮想マシン (VM) がメモリ不足 (OOM) を使い切るシナリオについて説明します。 OOM 条件により、新しいメモリ割り当て要求が失敗するか、 OOM キラー プロセスが呼び出されます。 これを行うために構成されている場合、 カーネルはパニックになりメモリ ダンプ ファイルが作成されます。

現象

Linux OS では、OS の実行中にいつでもメモリ割り当ての問題が発生する可能性があります。 これらの問題には、さまざまなログ記録シナリオが含まれます。 次のセクションでは、一般的なエラー メッセージの例をいくつか示します。

現象 1: メモリ割り当てエラー

[12345.678901] ruby: page allocation failure: order:0, mode:0x1080020(GFP_ATOMIC), nodemask=(null)

現象 2: メモリ不足エラー

OS との対話中にログまたはコマンド ラインで OOM エラーが発生しました。 たとえば、システム ログ ファイルには次のエラーが表示されます。

localhost kernel: Out of memory: Kill process 2154 (oom) score 844 or sacrifice child

次のテキストは、OOM メッセージの別の形式を示しています。 このメッセージは、OOM キラーが呼び出されたことを示します。

Jul  7 21:09:50 hostname kernel: [ 1347.090377] output.rb:140 invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0

シリアル コンソールまたはシステム ログでは、多くの場合、OOM イベントに対してカーネル スタック トレースが生成されます。 メッセージは次のテキストのようになります。

[1774674.375021] out_of_memory+0x1ab/0x4a0

現象 3: フォークに失敗する

OS が新しいプロセスを開始しようとしても、そのプロセスを作成できない場合は、"フォークに失敗しました" というメッセージが表示されます。 通常、このエラー メッセージは、プロセスをフォークできない理由を示します。 一般的な理由の 1 つと、この状況で適用可能な理由の 1 つは、初期プロセス状態に必要なメモリを割り当てない場合です。 次のテキストには、メッセージの 1 つの形式が含まれています。

Feb 29 08:35:52 hostname systemd: Failed to fork: Cannot allocate memory

原因

最上位レベルでは、このエラーの基本的な原因は、OS が作成された要求にメモリを割り当てることができないということです。 エラーの理由はさまざまであり、システム管理者はエラーが発生した時点で診断を行う必要があります。 メモリ割り当てエラーの原因としては、次のようなことが考えられますが、これに限定されません。

  • 予期しない、または対応を想定していないスパイクまたはアプリケーションの負荷の増加
  • メモリの断片化 (メモリの小さな空きブロックは使用できても、要求を満たすのに十分な大きさのブロックがないこと)
  • メモリ パラメーターの構成の誤り
  • アプリケーションでのメモリ リーク
  • カーネルのバグ
  • 使用可能なスワップ領域または完全なスワップがない

診断

メモリ診断は、エラーが検出された時点で行う必要があります。 通常、診断はさかのぼって行うことはできません。 さまざまなツールと方法を使用して、メモリの使用と断片化を診断できます。 次のツールの一覧は、すべてを網羅しているとは見なすべきではありませんが、一覧は診断を行うための出発点です。

  • free

  • vmstat

  • top

  • htop

  • atop

  • cat /proc/meminfo

  • cat /proc/buddyinfo

  • echo m > /proc/sysrq-trigger

    Note

    このコマンドの出力はシステム ログにあります。 通常、このログは /var/log/messages または /var/log/syslog ファイルです。

  • sa/sar

    Note

    sa ツールキットを使用すると、プロセス レベルの詳細を除き、システム全体の集計履歴データを分析できます。

ソリューション

最も適切なソリューションでは、メモリ使用量、パターン、構成を徹底的に分析する必要があります。 このようなソリューションには、次のアクション項目の 1 つ以上が含まれます。

  • VM メモリのスケールアップ
  • 制限が使用されている場合の cgroup 定義の再構成
  • 巨大なページ割り当ての変更
  • スワップ領域の構成

Azure でスワップ領域を構成するには、Azure のベスト プラクティスに従う 2 つの一般的なアプローチから選択できます。 どちらの方法でも、リソース ディスクを含む VM モデルが必要です。

システムの種類 アプローチの説明
cloud-init を使用するシステム 推奨される方法は、cloud-init 構成またはブートごとのスクリプトを使用することです。
cloud-init を使用せず、Azure エージェントを使用するシステム 構成ディレクティブは、 /etc/waagent.conf ファイルに存在し、カスタマイズ可能なサイズでリソース ディスクにスワップ ファイルを作成します。

これらの方法の詳細については、次の記事を参照してください。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。