「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の「pprof」と Docker 統計が異なるメモリ使用量を報告するのはなぜですか?

Go の「pprof」と Docker 統計が異なるメモリ使用量を報告するのはなぜですか?

2024 年 12 月 22 日に公開
ブラウズ:854

Why Do Go\'s `pprof` and Docker Stats Report Different Memory Usage?

Go Tool Pprof と Docker 統計間のメモリ使用量の不一致

Go 1.11 の使用中に、Go によって報告されるメモリ使用量の不一致が発生する場合があります。ツール pprof (runtime.MemStats.sys) と Docker 統計。 Docker 統計は、cgroup に依存して、ページ キャッシュや常駐セット サイズ (RES) などのメモリ使用量情報を取得します。一方、pprof はメモリ使用量のファズ値を表示するため、この 2 つを直接比較することが困難になります。

cgroups のメモリ使用量について

cgroups は方法を提供します。コンテナ内のリソースの使用を制限および追跡します。 cgroups の use_in_bytes メトリックには、プロセスによって使用されるメモリとキャッシュされたメモリの両方が含まれます。コンテナがホスト システムからファイルを読み取る場合、カーネルによってキャッシュされたメモリも use_in_bytes にカウントされます。

Docker でのメモリの再利用

コンテナがその上限に達した場合メモリ制限がある場合、Docker は未​​使用のメモリを再利用しようとします。これは、すべてのメモリが使用されたときに発生する OOM エラーとは異なります。

メモリ使用量を制限する方法

Docker コンテナのメモリ使用量を制御するには、次のようにします。 docker run コマンドまたは docker-compose.yml ファイルで mem_limit を使用してメモリ制限を指定できます。パラメータ.

結論

pprof 統計と docker 統計の間のメモリ使用量レポートの不一致は、メモリ使用量の測定方法が異なるために発生します。 docker stats で使用される cgroups は計算にファイル キャッシュ メモリを含みますが、pprof はキャッシュを考慮せずにファズ値を示します。 cgroup を通じてメモリ制限を管理することにより、コンテナ内で制御されないメモリ増加を防ぐことができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3