Go, Kontainer, dan Scheduler Linux
(riverphillips.dev)- Aplikasi Go di dalam kontainer: Pengembang Go sering men-deploy aplikasi ke kontainer yang memerlukan batas CPU untuk mencegah monopoli sumber daya host.
- Runtime Go dan batas CPU: Runtime Go pada dasarnya tidak menyadari batas CPU kontainer, yang dapat menyebabkan penggunaan berlebihan dan masalah performa.
- Garbage collector (GC) Go: GC Go berjalan secara bersamaan, tetapi memerlukan jeda singkat 'stop-the-world' selama penghentian sweep dan penghentian mark demi integritas data.
- Scheduler Linux - CFS: Completely Fair Scheduler (CFS) Linux mengalokasikan waktu CPU secara proporsional, dan proses menerima waktu CPU yang sesuai dengan core yang diizinkan.
- Masalah Go dan CFS: Go membuat satu thread OS per core CPU, tetapi mengabaikan batas CPU kontainer, sehingga dapat memperpanjang waktu GC 'stop-the-world'.
- Pengaturan GOMAXPROCS: Gunakan variabel lingkungan
GOMAXPROCSuntuk menyelaraskan thread OS Go dengan batas CPU kontainer agar latensi GC berkurang. - Otomatisasi GOMAXPROCS: Library
automaxprocsdari Uber dapat secara otomatis menetapkanGOMAXPROCSberdasarkan batas kontainer sehingga konfigurasi menjadi lebih sederhana. - Peningkatan runtime Go di masa depan: Ada isu GitHub terbuka untuk mengintegrasikan deteksi otomatis batas CPU ke dalam runtime Go.
Kesimpulan: Untuk penggunaan sumber daya yang efisien dan menjaga performa aplikasi Go di dalam kontainer, penting untuk mengonfigurasi batas CPU dan GOMAXPROCS dengan tepat.
1 komentar
Komentar Hacker News
--cpu-sharesGOMEMLIMITdi Go serta alat pengaturan otomatis batas memori (automemlimit)ko