
次のリソースを含むサイドカー コンテナーがあります。
resources:
limits:
memory: 512Mi
requests:
memory: 64Mi
しかし、 を実行するとtop
、次のようになります:
- envoy と pilot-agent はそれぞれ約 363MB と 61MB を使用しているようです
- 使用メモリは上部で54.6MBです
- 実行すると
free -m
、一見無関係な答えが得られる。
$ free -m
total used free shared buff/cache available
Mem: 385307 47140 315018 292 23148 336021
Swap: 0 0 0
ここでは正確に何が起こっているのでしょうか、そしてそれらのプロセスはどれくらいのメモリを消費しているのでしょうか?
答え1
この free および top 出力には、合計約 385,000 MiB のメモリを持つホストのうち、約 50,000 MiB が使用されていることが示されています。
コンテナはカーネルを共有するため、ホスト メトリックには通常、ノード全体の数値が表示されます。ただし、名前空間にはプロセスとファイルのみが表示されます。これは、オペレーティング システムがアプリケーションをサポートするためだけに存在する専用 VM または物理ホストとは異なります。
コンテナごとの数値には、cgroup の数値を照会する必要があります。Stack Overflow でこれを行う方法をいくつか参照してください。Kubernetes ポッドの CPU とメモリを確認するその多くはメトリック サーバーを必要とします。
プロセスの常駐メモリを合計して、それがシステムの正確なメモリ使用量であると期待するのは危険です。これには共有メモリやキャッシュは含まれません。また、カーネルはメモリに関して奇妙な計算トリックを実行します。3 桁の有効数字は正しい考えです。ただし、少数のプロセスで主にプライベート メモリを使用する単純なケースでは、これは適切な推定値です。