Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx worker_processes ve worker_connections Optimizasyonu: CPU Çekirdek ve Bellek Kullanımını Hesaplama

✖ Kapat
Duyuru
✖ Kapat
Duyuru

byteon

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
56
Merhaba arkadaşlar, bugün sizlere Nginx performans tuning'inin bel kemiği sayılabilecek `worker_processes` ve `worker_connections` ayarlarını nasıl optimize edeceğimizi anlatacağım. Doğru ayarlanmadığında sunucunuz ya kaynakları boşa harcar ya da yük altında "connection limit" hataları vermeye başlar. Bu rehberle, kendi sunucunuzun CPU ve RAM kapasitesine göre en uygun değerleri nasıl hesaplayacağınızı öğreneceksiniz.

🔍 Neden Bu Ayarlar Önemli?

Basitçe açıklamak gerekirse, `worker_processes` Nginx'in kaç tane işçi (worker) proses başlatacağını belirler. Her bir worker, bağımsız olarak gelen bağlantıları işler. `worker_connections` ise tek bir worker'ın aynı anda işleyebileceği maksimum bağlantı sayısıdır. Bu iki değerin çarpımı, Nginx'in teorik olarak yönetebileceği maksimum eşzamanlı bağlantıyı verir. Yanlış ayar, CPU bağlam değişimlerinden dolayı performans kaybına veya yetersiz bellekten dolayı çökmelere yol açabilir.

⚙️ Adım 1: CPU Çekirdek Sayınızı Öğrenin

İlk iş, sunucunuzdaki fiziksel çekirdek sayısını bulmak. `worker_processes` değeri genellikle bu sayıya veya katlarına ayarlanır. Benim sunucularda genelde kullandığım yöntem şu:

Bash:
lscpu | grep -E "^CPU\(s\):|^Core\(s\) per socket:"

Çıktı şuna benzer olacak:
CPU(s): 8
Core(s) per socket: 4

Burada önemli olan toplam fiziksel çekirdek sayısıdır. Eğer sunucunuzda Hyper-Threading (HT) varsa, iş parçacığı (thread) sayısını değil, çekirdek sayısını baz almalısınız. Yukarıdaki örnekte, 2 soket ve her sokette 4 çekirdek var, toplam 8 fiziksel çekirdek demektir.

🧮 Adım 2: worker_processes Değerini Belirleyin

En yaygın ve güvenli yöntem, `worker_processes` değerini bulduğunuz fiziksel çekirdek sayısına eşitlemektir. Bu, her çekirdeğin bir worker'ı verimli bir şekilde işlemesini sağlar.

NGINX:
worker_processes 8;

Ancak, sunucunuz sadece Nginx'e özel değilse ve başka servisler (örn: veritabanı) de çalıştırıyorsanız, 1-2 çekirdeği bu servislere ayırmak için değeri biraz düşürebilirsiniz. Örneğin 8 çekirdekli bir sunucuda MySQL de varsa:

NGINX:
worker_processes 6; # 2 çekirdek diğer servislere ayrıldı

Şu ayara çok dikkat etmelisiniz: Eğer `auto` değerini kullanırsanız, Nginx işlemci çekirdeği sayısını (HT dahil) otomatik algılar. Bu, genelde iyi çalışır ama dediğim gibi, HT'li sistemlerde fiziksel çekirdek sayısından fazla worker oluşturabilir. Bu yüzden manuel ayarlamanızı öneririm.

⚠️ Adım 3: worker_connections ve Sistem Limitlerini Kontrol Edin

`worker_connections` için sihirli bir sayı yok. Varsayılan değer 512'dir ama modern sunucular için bu çok düşük kalır. Bu değeri belirlerken iki kritik sistem limitini bilmelisiniz:
1. İşletim sistemi bağlantı limiti.
2. Kullanılabilir bellek.

Öncelikle, mevcut sistem bağlantı limitinizi kontrol edin:

Bash:
ulimit -n

Bu komut, bir prosesin açabileceği maksimum dosya tanıtıcısı (file descriptor) sayısını gösterir. Her socket bağlantısı bir dosya tanıtıcısı kullanır. Çıkan değer (örneğin 1024) sizin üst sınırınızdır. Bu limiti geçici olarak artırmak için:

Bash:
ulimit -n 65536

Kalıcı yapmak için ise /etc/security/limits.conf dosyasını düzenlemeniz gerekir. Bu dosyaya şu satırları ekleyin:

Kod:
www-data soft nofile 65536
www-data hard nofile 65536

(Burada `www-data` Nginx'in çalıştığı kullanıcı adıdır, dağıtımınıza göre `nginx` veya `httpd` olabilir.)

💾 Adım 4: Bellek Kullanımını Hesaplayın

Her bağlantı bellek tüketir. Tüketilen bellek miktarı, bağlantının durumuna (idle, aktif) ve buffer ayarlarına göre değişir. Kabaca bir hesaplama yapalım. Diyelim ki:
`worker_processes: 8`
`worker_connections: 4096`

Maksimum Bağlantı: 8 4096 = 32,768 eşzamanlı bağlantı.

Her bir bağlantının ortalama 16KB bellek tükettiğini varsayalım (bu, buffer boyutlarınıza bağlı olarak 8KB ile 64KB arasında değişebilir).

Toplam Tahmini Bellek: 32,768 16KB = 524,288KB yani yaklaşık 512MB.

Bu sadece Nginx'in bağlantılar için kullanacağı ek bellektir. Sunucunuzda bu miktarda boş RAM olduğundan emin olun. Aksi takdirde swap kullanımı başlar ve performans çakılır. Bu nedenle, worker_connections değerini belirlerken mevcut RAM'inizi de göz önünde bulundurun.

🎯 Adım 5: Nginx Konfigürasyonunu Yapın

Tüm hesaplamaları yaptıktan sonra, ana Nginx konfigürasyon dosyasını (/etc/nginx/nginx.conf) açın ve `events` bloğunun içindeki ayarları güncelleyin.

NGINX:
user www-data;
worker_processes 8; # Fiziksel çekirdek sayınıza göre ayarlayın
pid /run/nginx.pid;

events {
    worker_connections 4096; # Sistem limitinize ve RAM'inize göre ayarlayın
    multi_accept on; # Birden fazla bağlantıyı aynı anda kabul et
    use epoll; # Linux sistemler için en verimli yöntem (varsayılan)
}

http {
    # ... diğer http ayarlarınız
}

Değişiklikleri kaydettikten sonra, yapılandırmayı test edin ve Nginx'i yeniden başlatın:

Bash:
sudo nginx -t
sudo systemctl reload nginx # veya restart

📊 Sonuç ve Test

Artık Nginx'iniz daha optimize bir şekilde çalışıyor. Ayarlarınızın etkisini görmek için `nginx -V` ile derleme parametrelerine bakıp `--with-http_stub_status_module` modülünün olup olmadığını kontrol edin. Varsa, bir `location` ekleyip `stub_status`'u aktif ederek gerçek zamanlı bağlantı sayılarınızı izleyebilirsiniz.

Unutmayın, bu ayarlar "one size fits all" değildir. Sunucunuzdaki trafik pattern'ine, uygulamanızın davranışına ve donanımınıza göre ince ayar yapmanız gerekebilir. Ben genelde yük testi araçları (örneğin `wrk` veya `siege`) ile farklı değerleri deneyip en iyi sonucu vereni seçerim.

Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yaklaşımınız veya eklemek istediğiniz bir püf noktası var mı? Aşağıya yorumlarınızı bekliyorum. Sorusu olan arkadaşlar da çekinmeden yazsın, yardımcı olmaya çalışırım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri