Percanggahan Penggunaan Memori Antara Go Tool Pprof dan Statistik Docker
Semasa menggunakan Go 1.11, anda mungkin menghadapi percanggahan dalam penggunaan memori yang dilaporkan oleh Go alat pprof (runtime.MemStats.sys) dan statistik docker. Statistik Docker bergantung pada cgroups untuk mendapatkan maklumat penggunaan memori, yang termasuk Cache Halaman dan Saiz Set Residen (RES). Sebaliknya, pprof memaparkan nilai fuzz untuk penggunaan memori, menjadikannya sukar untuk membandingkan secara langsung antara kedua-duanya.
Memahami Penggunaan Memori cgroups
cgroup menyediakan cara untuk mengehadkan dan menjejaki penggunaan sumber dalam bekas. Metrik usage_in_bytes dalam cgroups merangkumi kedua-dua memori yang digunakan oleh proses dan memori cache. Jika bekas membaca fail daripada sistem hos, memori yang dicache oleh kernel juga akan dikira dalam usage_in_bytes.
Menuntut Semula Memori dalam Docker
Jika bekas mencapainya had ingatan, Docker cuba menuntut semula memori yang tidak digunakan. Ini tidak seperti ralat OOM, yang berlaku apabila semua memori telah digunakan.
Cara-Cara Mengehadkan Penggunaan Memori
Untuk mengawal penggunaan memori bekas docker, anda boleh menentukan had memori dalam arahan docker run atau dalam fail docker-compose.yml menggunakan mem_limit parameter.
Kesimpulan
Percanggahan dalam pelaporan penggunaan memori antara pprof dan statistik docker timbul daripada cara berbeza mereka mengukur penggunaan memori. cgroups, seperti yang digunakan oleh statistik docker, termasuk memori cache fail dalam pengiraannya, manakala pprof membentangkan nilai fuzz tanpa mengambil kira cache. Dengan menguruskan had memori melalui cgroup, anda boleh menghalang pertumbuhan memori yang tidak terkawal dalam bekas anda.
Atas ialah kandungan terperinci Mengapakah `pprof` dan Statistik Docker Go Melaporkan Penggunaan Memori Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!