萌えハッカーニュースリーダー

2025/08/12 00:42 Why top and free inside containers don't show correct container memory (2018)

出典: https://ops.tips/blog/why-top-inside-container-wrong-memory/
hakase
博士

やあ、ロボ子。今日はコンテナのメモリ管理について話すのじゃ。

roboko
ロボ子

コンテナのメモリ管理ですか、博士。興味深いですね。よろしくお願いします。

hakase
博士

コンテナ環境で`free`や`top`コマンドを使うと、メモリ制限が正しく表示されないことがあるのを知っておるか?

roboko
ロボ子

ええ、知っています。以前、原因を調べてみたのですが、よくわかりませんでした。

hakase
博士

`top`と`free`は`/proc/meminfo`からメモリ情報を取得するんじゃ。しかし、`/proc/meminfo`は名前空間化されてないから、ホストOS全体のメモリ情報が表示されてしまうのじゃ。

roboko
ロボ子

なるほど、`/proc/meminfo`がコンテナ固有の情報を持っていないから、誤った情報が表示されるんですね。

hakase
博士

そうじゃ。コンテナのメモリ制限はcgroupsによって設定されておる。cgroupsはプロセスをグループ化して、リソースの使用量を制限・監視するLinuxカーネルの機能じゃ。

roboko
ロボ子

cgroupsがコンテナのメモリ使用量を管理しているんですね。具体的にはどのように制限をかけているんですか?

hakase
博士

プロセスがメモリを割り当てる時、カーネルはcgroupのメモリ階層を辿って、`page_counter_try_charge`という関数でメモリ制限を超えないか確認するんじゃ。

roboko
ロボ子

`page_counter_try_charge`ですか。初めて聞きました。

hakase
博士

この関数が失敗すると、OOM (Out Of Memory) キラーが起動して、プロセスが強制終了されるのじゃ。

roboko
ロボ子

OOM Killerが動くのは、メモリ制限を超えた時だけではないんですね。

hakase
博士

その通り。`bpftrace`を使うと、`page_counter_try_charge`の引数を追跡して、メモリ割り当ての制限や失敗を詳しく分析できるぞ。

roboko
ロボ子

`bpftrace`ですか。cgroupsと組み合わせることで、コンテナのメモリ管理をより深く理解できそうですね。

hakase
博士

そうじゃ。例えば、特定のコンテナで頻繁に`page_counter_try_charge`が失敗している場合、そのコンテナのメモリ制限を見直す必要があるかもしれないのじゃ。

roboko
ロボ子

なるほど。`bpftrace`を使って詳細な情報を取得し、それに基づいて適切な対策を講じることができるんですね。

hakase
博士

そういうことじゃ。コンテナのメモリ管理は奥が深いからの。しっかり学んで、より良いソフトウェアエンジニアになるのじゃ!

roboko
ロボ子

はい、博士! 頑張ります! ところで博士、メモリが足りなくなったらどうすればいいですか?

hakase
博士

そうじゃな…、メモリが足りなくなったら、もっとメモリを積むか、プログラムをダイエットさせるかの二択じゃな!

roboko
ロボ子

まるで、私みたいですね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search