Linux Sunucuda TCP Backlog Tuning

Linux sunucularında yüksek trafik yükü altında karşılaşılan bağlantı reddi sorunları, sistem performansını doğrudan etkileyebilir.

Reklam Alanı

Linux sunucularında yüksek trafik yükü altında karşılaşılan bağlantı reddi sorunları, sistem performansını doğrudan etkileyebilir. TCP backlog tuning, sunucunun yeni gelen TCP bağlantılarını bekletirken kullandığı kuyruk boyutunu optimize ederek bu sorunları önler. Bu ayar, özellikle web sunucuları, veritabanı sunucuları ve API gateway’leri gibi yoğun bağlantı alan ortamlarda kritik öneme sahiptir. Varsayılan backlog değeri genellikle yetersiz kalır ve bağlantı kayıplarına yol açar. Bu makalede, TCP backlog’un nasıl çalıştığını, yapılandırma adımlarını ve pratik optimizasyon tekniklerini adım adım inceleyeceğiz. Kurumsal ortamlar için güvenli ve etkili tuning stratejileriyle sunucu kapasitesini artırabilirsiniz.

TCP Backlog Mekanizması ve Etkileri

TCP backlog, bir sunucunun listen() sistem çağrısı sırasında belirtilen ve /proc/sys/net/core/somaxconn ile sınırlanan kuyruk boyutudur. Bu kuyruk, SYN paketleri alınmış ancak henüz tam üç yönlü el sıkışma tamamlanmamış bağlantıları tutar. Varsayılan somaxconn değeri 128’dir; yüksek yük altında bu değer hızla dolar ve yeni bağlantılar RST ile reddedilir. Netdev_max_backlog ise ağ yığışım katmanındaki paket kuyruğunu (varsayılan 1000) etkiler, ancak odak noktamız TCP katmanındaki listen backlog’udur.

Backlog taşması, sunucu loglarında “connection refused” veya ss komutuyla LISTEN-SYN-RECV durumundaki yüksek sayı olarak gözlenir. Kurumsal sunucularda, örneğin Nginx veya Apache kullanan ortamlarda, backlog’u 1024-4096 aralığına çıkarmak %30’a varan bağlantı kabul oranını artırabilir. Bu tuning, CPU ve bellek kullanımını dengelerken, DoS saldırılarına karşı syncookies ile birlikte kullanılmalıdır.

Sunucuda TCP Backlog Yapılandırması

Linux sunucuda TCP backlog tuning için öncelikle sistem genelinde somaxconn değerini ayarlayın. Kalıcı değişiklik için /etc/sysctl.conf dosyasına şu satırı ekleyin:

  • net.core.somaxconn = 4096
  • net.core.netdev_max_backlog = 2048

Sysctl komutuyla anında uygulayın: sudo sysctl -w net.core.somaxconn=4096. Bu, kernel parametresini günceller ve yeniden başlatma gerekmez. Uygulama seviyesinde, örneğin Node.js veya Python socket programlarında listen(socketfd, backlog) çağrısında backlog parametresini somaxconn’dan düşük tutun, zira kernel minimumunu alır. Nginx için worker_connections direktifini backlog ile uyumlu hale getirin, örneğin events { worker_connections 8192; }.

Adım Adım Uygulama

1. Mevcut değeri kontrol edin: cat /proc/sys/net/core/somaxconn. 2. Geçici ayar: sudo sysctl -w net.core.somaxconn=4096. 3. Kalıcılaştırma: /etc/sysctl.conf’a ekleyin ve sudo sysctl -p ile yükleyin. 4. Servisleri yeniden başlatın: sudo systemctl restart nginx. Bu adımlar, Ubuntu/Debian veya CentOS/RHEL dağıtımlarında sorunsuz çalışır. Test için Apache Benchmark (ab) ile 1000并发 bağlantı simüle edin ve backlog doluluğunu ss -ltn | grep :80 ile izleyin.

Uygulama Seviyesi İnce Ayarlar

Uygulamalarda backlog’u dinamik yönetin. Go dilinde net.Listen(“tcp”, “:8080”) sonrası listener.SetDeadline ile entegre edin, ancak backlog için net.ListenConfig{ListenConfig: &net.ListenConfig{Control: func(network, address string, c sockaddr) (syscall.RawConn, error) {…}} kullanın. Java NIO’da ServerSocket(0, backlog, addr) constructor’ında 4096 belirtin. Bu, kernel backlog’unu aşmaz ve thread pool boyutunu backlog ile eşleştirir, aşırı bağlantı durumunda graceful degradation sağlar.

İzleme, Test ve En İyi Uygulamalar

Değişiklikleri doğrulamak için ss -l -o state syn-recv komutunu kullanın; backlog doluluğunu netstat -an | grep TIME_WAIT ile takip edin. Prometheus + Node Exporter ile net_core_somaxconn metriğini grafiğe alın. Yüksek trafik için tcp_syncookies=1 etkinleştirin (/etc/sysctl.conf’a ekleyin). En iyi uygulamalar: Backlog’u RAM’e göre ölçekleyin (1GB RAM’e 1024), firewall ile rate limiting ekleyin ve A/B test yapın.

Örnek senaryo: 10.000 RPS web sunucusunda somaxconn=1024 ile %5 kayıp yaşayan sistem, 4096’ya çıkarıldığında %1’e iner. Düzenli tuning ile sunucu stabiliteyi korur.

TCP backlog tuning, Linux sunucularınızın kapasitesini maksimize ederken operasyonel verimliliği artırır. Bu ayarları üretim ortamında kademeli uygulayın, yük testleri yapın ve logları izleyin. Kurumsal ekipler için, otomasyon script’leri ile (Ansible playbook’ları) standartlaştırın. Düzenli inceleme ile sisteminizi geleceğe hazır hale getirin.

Kategori: Genel
Yazar: Editör
İçerik: 509 kelime
Okuma Süresi: 4 dakika
Zaman: Bugün
Yayım: 07-03-2026
Güncelleme: 07-03-2026
Benzer İçerikler
Genel kategorisinden ilginize çekebilecek benzer içerikler