2 poin oleh GN⁺ 2023-11-09 | 1 komentar | Bagikan ke WhatsApp
  • 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 GOMAXPROCS untuk menyelaraskan thread OS Go dengan batas CPU kontainer agar latensi GC berkurang.
  • Otomatisasi GOMAXPROCS: Library automaxprocs dari Uber dapat secara otomatis menetapkan GOMAXPROCS berdasarkan 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

 
GN⁺ 2023-11-09
Komentar Hacker News
  • Diskusi tentang penggunaan reservasi CPU alih-alih batas CPU di lingkungan container
  • Masalah aplikasi di dalam container yang salah mendeteksi jumlah core
  • Penjelasan detail tentang pengaturan Docker CFS cgroup dan anjuran penggunaan --cpu-shares
  • Pengalaman menghadapi masalah scheduler CFS di dalam container dan rasa penasaran terhadap scheduler baru
  • Penyebutan hadirnya GOMEMLIMIT di Go serta alat pengaturan otomatis batas memori (automemlimit)
  • Berbagi tantangan dalam mengelola batas CPU untuk deployment Go di dalam cluster Kubernetes
  • Ucapan terima kasih atas penyebutan proyek dari maintainer tool ko
  • Pertanyaan tentang kemungkinan runtime Go menyadari batas CGroups dan apakah runtime lain menunjukkan perilaku serupa
  • Diskusi tentang pengurangan latensi GC dengan menjalankan pekerjaan konkuren sebelum mencapai safe point
  • Penyebutan bahwa tim .NET CLR juga menyesuaikan skenario serupa di lingkungan container