メモリ診断機能は、メモリリーク、メモリ断片化、メモリ不足 (OOM) エラーなど、Container Service for Kubernetes (ACK) クラスターの一般的なメモリ問題を特定するのに役立ちます。 診断結果はグラフと表に表示され、各フォルダ内のファイルが占有するコンテナキャッシュと共有メモリが表示され、全体的なメモリ使用量に関する洞察を得て、O&M作業を容易にします。 このトピックでは、メモリ診断について説明します。
メモリ診断は、メモリの概要、メモリ分析、およびOOM分析で構成されます。 ノードとポッドのメモリ使用量を表示できます。
メモリの概要
メモリ概要機能は、メモリリスクに関連する診断項目を表示します。 次の表に、診断項目を示します。
診断アイテム | 説明 |
漏れたメモリ | Slab、Vmalloc、およびバディシステム (allocpage) でシステムカーネルのメモリリークをチェックします。 |
メモリ使用量 | システムメモリの使用率を表示します。 |
Memcg | 未リリースのメモリcgroupsがシステムパフォーマンスを損ない、統計エラーを引き起こすかどうかを評価します。 |
メモリ断片化 | システムパフォーマンスを損なうメモリ断片化をチェックします。 |
THPZeroPage | THP廃棄物の比率を評価します。 |
- カーネルメモリ (カーネル): オペレーティングシステムカーネルによって使用されるメモリの総量。
- アプリケーションメモリ (アプリ): ユーザーモードでプログラムが使用するメモリの合計量。
- 空きメモリ (Free): 空きシステムメモリの量。
用語
期間 | 説明 |
メモリリーク | メモリリークとは、プログラムに動的に割り当てられるメモリリソースの解放を指します。これにより、システムメモリの使用率が増加します。 メモリリークは、プログラムのパフォーマンスを低下させたり、システムクラッシュを引き起こす可能性があります。 |
メモリ使用率 | 以下の式を使用して、メモリ使用率=(総メモリ − 空きメモリ) × 100 /総メモリを計算する。 ファイルキャッシュは空きメモリであり、メモリ使用率には影響しません。 |
未発表のメモ | システム例外によりリリースされないメモリcgroups。 これらのメモリグループは、システム性能を損なう可能性がある。 |
メモリ断片化 | メモリ断片化とは、システムが長期間実行された後に、空いている連続メモリブロックが小さすぎるために、連続メモリ割り当て要求を満たすことができないことを指す。 この失敗により、メモリ割り当てが遅延し、ビジネスのジッターが発生します。 |
THP廃棄物の比率 | 透明巨大ページ (THP) は、サイズがカーネルで2 MiBまたは1 GiBの巨大ページです。 サブページのサイズは4 KiBです。 THPが有効になると、カーネルはTHPを動的に割り当てて、変換ルックアサイドバッファ (TLB) のミスを減らし、アプリケーションのパフォーマンスを向上させます。 ただし、THPは記憶肥大を引き起こす可能性があります。 カーネルは、512サブページに相当するメモリの2つのMiBブロックをTHPとして割り当てます。 これはメモリの浪費を引き起こし、メモリオーバーコミットメントをもたらす。 メモリ膨張はOOMエラーにつながる可能性があります。 たとえば、8 KiBのメモリ (2サブページ) のみを要求するアプリケーションに2 − MiB THPが割り当てられた場合、残りの510サブページはゼロサブページになり、RSS (resident set size) が無駄になり、OOMエラーが発生します。 THP廃棄物の割合=ゼロTHPsの数 × 100% /THPsの総数 |
バディシステム | バディシステムは、Linuxカーネルがメモリページを管理するために使用するアルゴリズムです。 メモリページを11のグループに分割します。 ほとんどの場合、メモリページのサイズは4 KBです。 バディシステムは、4 KB、8 KB、16 KB、32 KB………4 MBなど、各メモリブロックのメモリページ数を2の累乗で管理します。 |
スラブ | Linuxのバディシステムに基づいて小さなメモリを割り当てるメモリアロケータ。 |
Vmalloc | Linuxのバディシステムに基づく非線形マッピングを使用するメモリアロケーター。 |
filecache | Linuxがファイルを読み書きすると、ファイルの内容がメモリにキャッシュされます。 このようにして、プログラムはメモリ内のコンテンツを直接読み書きできます。これは、ファイルの読み書きよりもはるかに高速です。 |
匿名メモリ | 匿名メモリは、new、malloc、またはmmapを介してプロセスのヒープとスタックに動的に割り当てられます。 匿名メモリはファイルシステムによってバックアップされていません。 |
共有メモリ | 通信のために2つ以上のプロセスによって共有されるメモリブロック。 |
tmpfs | メモリに基づくLinuxの一時ファイルシステム。 ファイルシステムは、メモリに読み書きするコンテンツをキャッシュします。 |
hugetlb | ファイルシステム内の巨大なページによって消費されるメモリの量。 |
カーネルメモリ
ほとんどの場合、メモリリークは、Sunreclaimとバディシステムのメモリ使用量が異常な場合に発生します。 カーネルモードでのメモリ使用量に注意してください。
メトリック | 説明 |
Screclimable | スラブによって再利用できるメモリ。 |
Sunreclaim | スラブで再利用できないメモリ。 |
ページテーブル | カーネルページテーブルによって占有されるメモリ。 |
Vmalloc | Vmalloc関数を呼び出して割り当てられたメモリ。 |
KernelStack | プロセスのヒープとスタックが占有するメモリの合計。 |
AllocPages | alloc_pagesなどの関数を呼び出すことによってバディシステムから割り当てられたメモリ。 ノードファイルを使用してメモリを取得することはできません。 メモリの過度の使用はブラックホールを引き起こします。 |
アプリケーションメモリ
ユーザーモードのアプリケーションのメモリ使用量を表示する場合は、匿名メモリ、共有メモリ、およびファイルキャッシュに細心の注意を払う必要があります。
メトリック | 説明 |
filecache | ドロップキャッシュを実行して再利用できるファイルキャッシュ。 |
anon | プログラムのヒープとスタックが占有する匿名メモリ。 大量の匿名メモリが占有されている場合は、プロセス内のメモリリークを確認し、THPが有効になっているかどうかを確認する必要があります。 |
mlock | システムによってロックされたメモリ。 |
巨大な | 巨大なページで占められたメモリ。 |
buffer | ブロックデバイスとファイルシステムのメタデータが占有するメモリ。 |
shmem | 共有メモリ (tmpfs) 。 プロセス終了後にtmpfsファイルが削除されない場合、またはファイルが開いている状態でtmpfsファイルが削除された場合、共有メモリリークが発生します。 |
メモリ分析
メモリ解析は、プロセスメモリ解析とポッドメモリ解析で構成されます。
プロセスメモリ
匿名メモリ、ファイルキャッシュ、共有メモリなど、メモリ使用量情報はプロセスごとに表示されます。
ポッドメモリ
ポッドメモリ分析機能を使用すると、コンテナとポッドのファイルキャッシュと共有メモリを占有するファイル、アクティブキャッシュの比率、および非アクティブキャッシュの比率を表示できます。
診断アイテム | 説明 |
ポッド | ポッドの名前。 |
Container | コンテナーの名前。The name of the container. |
ファイル | ファイル名を含むファイルのフルパス。 |
キャッシュ | ファイルが占有するファイルキャッシュ (filecache) 。 |
コンテナキャッシュ | ファイルが占有するコンテナキャッシュ。 コンテナ内の異なるプロセスが同じファイルを管理してもよい。 |
アクティブキャッシュ | 使用中のファイルキャッシュ。 |
非アクティブキャッシュ | 使用されていないファイルキャッシュ。 |
OOM分析
OOM分析機能は、OOMエラーを迅速に診断し、次の診断項目を表示できます。
診断アイテム | 説明 |
OS OOMカウント | ホストが起動してから診断が実行されるまでに発生したOOMエラーの総数。 |
使用可能メモリ | 空きシステムメモリの量。 |
低い透かし | 指定された低メモリ使用量のしきい値。 メモリ使用量が低しきい値を下回ると、非同期メモリ再利用操作がトリガーされます。 |
Container | ポッドの名前、コンテナーのID、またはcgroupの名前。 |
limit | コンテナーのメモリ制限。 |
使用状況 | コンテナーによって使用されるメモリの量。 |
OOMカウント | コンテナーで発生したOOMエラーの総数。 |
OOMタイプ | OOMエラーのタイプ。Hostまたはcgroupです。 |