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 を通じてメモリ制限を管理することにより、コンテナ内で制御されないメモリ増加を防ぐことができます。
以上がGo の「pprof」と Docker 統計が異なるメモリ使用量を報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。