Go, konteynerler ve Linux zamanlayıcısı
(riverphillips.dev)- Konteyner içindeki Go uygulamaları: Go geliştiricileri, ana makine kaynaklarının tekelleştirilmesini önlemek için CPU sınırı gerektiren konteynerlere uygulamalarını sıkça dağıtır.
- Go runtime’ı ve CPU sınırları: Go runtime’ı, konteynerin CPU sınırlarının doğası gereği farkında değildir; bu da aşırı kullanım ve performans sorunlarına yol açabilir.
- Go çöp toplayıcısı (GC): Go’nun GC’si eşzamanlı çalışır, ancak veri bütünlüğü için sweep termination ve mark termination sırasında kısa süreli 'stop-the-world' duraklamaları gerekir.
- Linux zamanlayıcısı - CFS: Linux’un Completely Fair Scheduler (CFS) sistemi CPU zamanını orantılı biçimde tahsis eder ve süreçler izin verilen çekirdeklere karşılık gelen CPU zamanını alır.
- Go ve CFS’deki sorun: Go, CPU çekirdeği başına bir OS thread’i oluşturur; ancak konteynerin CPU sınırlarını yok sayarak GC 'stop-the-world' sürelerini uzatabilir.
GOMAXPROCSayarı:GOMAXPROCSortam değişkeni kullanılarak Go’nun OS thread sayısı konteyner CPU sınırıyla hizalanabilir ve GC gecikmeleri azaltılabilir.GOMAXPROCSotomasyonu: Uber’inautomaxprocskütüphanesi, konteyner sınırlarına göreGOMAXPROCSdeğerini otomatik ayarlayarak yapılandırmayı basitleştirebilir.- Gelecekte Go runtime’ında iyileştirmeler: Go runtime’ına otomatik CPU sınırı farkındalığını entegre etmek için açık bir GitHub konusu bulunuyor.
Sonuç: Konteyner içindeki Go uygulamalarında kaynakların verimli kullanımı ve performansın korunması için CPU sınırlarının ve GOMAXPROCS ayarının doğru yapılandırılması önemlidir.
1 yorum
Hacker News görüşleri
--cpu-shareskullanım önerisiGOMEMLIMIT'in eklenmesi ve bellek sınırını otomatik ayarlayan araçtan (automemlimit) bahsedilmesikoaracı bakımcısına projeden bahsettiği için teşekkür edilmesi