2 puan yazan GN⁺ 2023-11-09 | 1 yorum | WhatsApp'ta paylaş
  • 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.
  • GOMAXPROCS ayarı: GOMAXPROCS ortam değişkeni kullanılarak Go’nun OS thread sayısı konteyner CPU sınırıyla hizalanabilir ve GC gecikmeleri azaltılabilir.
  • GOMAXPROCS otomasyonu: Uber’in automaxprocs kütüphanesi, konteyner sınırlarına göre GOMAXPROCS değ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

 
GN⁺ 2023-11-09
Hacker News görüşleri
  • Konteyner ortamında CPU sınırı yerine CPU rezervasyonu kullanımının tartışılması
  • Konteyner içindeki uygulamaların çekirdek sayısını yanlış algılama sorunu
  • Docker CFS cgroup ayarlarının ayrıntılı açıklaması ve --cpu-shares kullanım önerisi
  • Konteyner içinde CFS zamanlayıcısı sorunlarını deneyimleme ve yeni zamanlayıcıya dair merak
  • Go'da GOMEMLIMIT'in eklenmesi ve bellek sınırını otomatik ayarlayan araçtan (automemlimit) bahsedilmesi
  • Kubernetes kümesi içinde Go dağıtımlarında CPU sınırlarını yönetme zorluğunun paylaşılması
  • ko aracı bakımcısına projeden bahsettiği için teşekkür edilmesi
  • Go çalışma zamanının CGroups sınırlarını algılayabilme ihtimali ve diğer çalışma zamanlarının da benzer davranıp davranmadığına dair soru
  • Güvenli noktaya ulaşmadan önce eşzamanlı iş yaparak GC gecikmesini azaltma tartışması
  • .NET CLR ekibinin konteyner ortamında benzer senaryolar için yaptığı ayarlamalardan bahsedilmesi