すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:メモリ診断

最終更新日:Aug 26, 2026

視覚的な診断により、ACK クラスター内のメモリリーク、断片化、および OOM エラーを特定します。

メモリ診断は、メモリ概要メモリ分析OOM 分析の 3 つの領域で構成されます。ノードレベルと Pod レベルの両方でメモリを検査します。

説明

表示される診断項目は、実際のクラスター設定を反映しています。

重要

診断を実行すると、ACK は各ノードからシステムバージョン、負荷状況、Docker と kubelet のステータス、システムログ内の主要なエラーメッセージなどのデータを収集します。ACK は、ビジネスデータや機密情報を収集しません。

診断ワークフロー

3 つの診断領域を順番に使用して、メモリの問題を絞り込みます。

  1. メモリ概要 — メモリリーク、断片化、未解放の Memcg エントリ、THP の浪費などのメモリリスクを確認します。グラフを使用して、異常な使用がカーネルメモリとアプリケーションメモリのどちらで発生しているかを確認します。

  2. メモリ分析 — プロセスレベルおよび Pod レベルのメモリ使用量までドリルダウンし、どのプロセスまたはコンテナが過剰な匿名メモリ、ページキャッシュ、または共有メモリを消費しているかを特定します。

  3. OOM 分析 — OOM イベントの数と種類を確認し、OOM エラーがノード (ホスト) レベルで発生しているか、コンテナ (cgroup) レベルで発生しているか、またどのコンテナがメモリ制限に達したかを判断します。

メモリ概要

以下の診断項目でメモリリスクを特定します。

診断項目 説明
メモリリーク Slab、Vmalloc、バディシステム (allocpage) におけるカーネルメモリのリークをチェックします。
メモリ使用量 システムのメモリ使用率を表示します。
Memcg 未解放のメモリ cgroup (Memcg) がシステムのパフォーマンスを低下させたり、統計エラーを引き起こしたりしていないかチェックします。
メモリの断片化 システムのパフォーマンスを低下させるメモリの断片化をチェックします。
THPZeroPage 透過的ヒュージページ (THP) の浪費率を評価します。

システムのメモリ使用量は、グラフで 3 つのカテゴリに分けて表示されます。

  • カーネルメモリ (kernel):OS カーネルが使用する合計メモリ。

  • アプリケーションメモリ (app):ユーザーモードのプログラムが使用する合計メモリ。

  • 空きメモリ (free):システムの合計空きメモリ。

基本概念

以下の用語は、メモリ診断全体で使用されます。

用語 説明
メモリリーク 動的に割り当てられたメモリが解放されず、メモリ使用量が継続的に増加する場合に発生します。未解決のリークはパフォーマンスを低下させ、クラッシュを引き起こす可能性があります。
メモリ使用率 メモリ使用率 = (合計メモリ - 空きメモリ) x 100 / 合計メモリ。ページキャッシュは空きメモリとしてカウントされ、使用率には影響しません。カーネルはいつでも回収できます。
未解放のMemcg システム例外のために解放されなかったメモリ cgroup。システムのパフォーマンスを低下させる可能性があります。
メモリの断片化 時間の経過とともに、連続した空きメモリブロックが小さくなり、大きな割り当て要求に対応できなくなります。これにより、割り当てが遅延し、アプリケーションのジッターが発生します。
THPの浪費率 THP の浪費率 = ゼロ THP の数 x 100% / THP の総数。詳細については、後述の「THP の詳細」をご参照ください。
バディシステム メモリページを管理するための Linux カーネルアルゴリズム。ページを 2 のべき乗のブロックサイズを持つ 11 のグループ (4 KB、8 KB、16 KB、32 KB ... 4 MB) に分割します。ほとんどのページは 4 KB です。
Slab バディシステム上で小さなメモリを割り当てます。
Vmalloc バディシステム上で非線形マッピングを使用してメモリを割り当てます。
ページキャッシュ (filecache) Linux は、後のアクセスを高速化するために、ファイルの内容をメモリにキャッシュします。
匿名メモリ newmalloc、または mmap によってプロセスのヒープとスタックに動的に割り当てられるメモリ。ファイルシステムによってバックアップされません。
共有メモリ プロセス間通信のために 2 つ以上のプロセスで共有されるメモリブロック。
tmpfs メモリにバックアップされる Linux の一時ファイルシステム。すべての読み取りと書き込みがメモリにキャッシュされます。
hugetlb ファイルシステム内のヒュージページによって消費されるメモリ。

THP の詳細

透過的ヒュージページ (THP) は、カーネル内でサイズが 2 MiB または 1 GiB のヒュージページです。各サブページは 4 KiB なので、1 つの 2 MiB THP は 512 のサブページに相当します。

THP が有効になっていると、カーネルは動的に THP を割り当て、トランスレーション ルックアサイド バッファ (TLB) のミスを減らし、パフォーマンスを向上させます。ただし、THP はメモリの肥大化と過剰コミットを引き起こす可能性があります。アプリケーションが 8 KiB (2 サブページ) しか要求しない場合でも、カーネルは完全な 2 MiB の THP を割り当てます。これにより、510 のゼロサブページが残り、常駐セットサイズ (RSS) を浪費し、OOM エラーを引き起こす可能性があります。

カーネルメモリのメトリクス

ほとんどの場合、メモリリークは SUnreclaim またはバディシステムの異常な使用量によって示されます。これらのメトリクスを注意深く監視してください。

メトリクス 説明
SReclaimable Slab が回収できるメモリ。
SUnreclaim Slab が回収できないメモリ。異常な増加は、カーネルメモリのリークを強く示唆しています。
PageTables カーネルのページテーブルによって占有されるメモリ。
Vmalloc Vmalloc によって割り当てられたメモリ。
KernelStack プロセスによって使用されるカーネルスタックメモリの合計。
AllocPages alloc_pages などの関数によってバディシステムから割り当てられたメモリ。どのノードファイルからも取得できないため、過剰に使用するとメモリのブラックホールが作成されます。

アプリケーションメモリのメトリクス

ユーザーモードのメモリ使用量を分析する際は、匿名メモリ、共有メモリ、ページキャッシュに注目します。

メトリクス 説明
filecache drop caches を実行することで回収できるページキャッシュ。
anon プログラムのヒープとスタックで使用される匿名メモリ。使用量が多い場合は、プロセスのメモリリークまたは THP が有効になっていることを示唆します。
mlock システムによってロックされたメモリ。
huge ヒュージページによって使用されるメモリ。
buffer ブロックデバイスとファイルシステムのメタデータによって使用されるメモリ。
shmem 共有メモリ (tmpfs)。プロセスが終了した後に tmpfs ファイルが削除されない場合、またはファイルが開いている間に削除された場合にリークが発生します。

メモリ分析

プロセスメモリPod メモリの 2 つのビューを提供します。

プロセスメモリ

メモリ使用量でソートされたプロセスを一覧表示し、匿名メモリ、ページキャッシュ、共有メモリの内訳を示します。

Podメモリ

各コンテナと Pod でどのファイルがページキャッシュと共有メモリを占有しているか、またアクティブキャッシュと非アクティブキャッシュの比率を表示します。

診断項目 説明
Pod Pod の名前。
コンテナ コンテナの名前。
ファイル ファイル名を含むファイルのフルパス。
キャッシュ ファイルによって占有されるページキャッシュ (filecache)。
コンテナキャッシュ ファイルによって占有されるコンテナレベルのキャッシュ。同じコンテナ内の複数のプロセスが同じファイルを参照する場合があります。
アクティブキャッシュ 現在使用中のページキャッシュ。
非アクティブキャッシュ 使用されておらず、回収対象となるページキャッシュ。

OOM分析

以下の項目でメモリ不足エラーを診断します。

診断項目 説明
OS OOMカウント ホストの起動から診断までの合計 OOM エラー数。
利用可能なメモリ 現在のシステムの空きメモリ。
低ウォーターマーク メモリ不足のしきい値。利用可能なメモリがこの値を下回ると、カーネルは非同期のメモリ回収をトリガーします。
コンテナ Pod 名、コンテナ ID、または cgroup 名。
制限 コンテナに設定されたメモリ制限。
使用量 コンテナが現在使用しているメモリ。
OOMカウント コンテナ内の合計 OOM エラー数。
OOMタイプ [Host]OOM エラーのタイプ:ホストまたは。