WebSocket, SSE ve HTTP/2 coklu akislarinda Linux cekirdeginin 'TCP: out of memory' hatasi vermesini onleyin. Soket tampon boyutlarini, BDP bant genisligini ve epoll dosya limitlerini hesaplayin.
Hedef eszamanlilik hacmi ve protokol tipine gore TCP soket bellek gereksinimini hesaplayin.
Ayni anda paket ileten soket orani.
Soket tamponlari icin hesaplanan bellek sunucu fiziki RAM butcesi icindedir.
100K+ baglantiyi kilitsiz desteklemek icin gereken sysctl, limits.conf ve nginx dosyalari.
# /etc/sysctl.d/99-tcp-concurrency.conf # WebSocket & IoT (C100K+ Yuksek Eszamanlilik) — Hedef: 50.000 Eszamanli Baglanti # Sistem Geneli Dosya Tanimlayici (File Descriptor) Limitleri fs.file-max = 2097152 fs.nr_open = 1048576 # TCP Baglanti Havuzu ve Dinleme Kuyruklari net.core.somaxconn = 10000 net.ipv4.tcp_max_syn_backlog = 20000 net.core.netdev_max_backlog = 10000 # TCP Socket Tampon Boyutlari (min default max bayt cinsinden) net.core.rmem_max = 262144 net.core.wmem_max = 262144 net.ipv4.tcp_rmem = 4096 16384 262144 net.ipv4.tcp_wmem = 4096 16384 262144 # TCP Global Bellek Kotasi (4KB Bellek Sayfalari Cinsinden: low pressure max) net.ipv4.tcp_mem = 314573 629146 943718 net.ipv4.tcp_moderate_rcvbuf = 1 # TIME_WAIT Geri Donusumu ve Yerel Port Havuzu (64K baglanti sinirini asmama) net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.ip_local_port_range = 1024 65535 # Keep-Alive Yapilandirmasi (Olu baglantilari hizli tespit et) net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_keepalive_probes = 5
Modern gercek zamanli (real-time) uygulamalarda (WebSocket sohbet, canli finans verileri, IoT ve HTTP/2 akislari) sunucunun karsilayabilecegi eszamanli baglanti sayisi, yalnizca CPU hiziyla degil; Linux cekirdeginin her soket icin ayirdigi ag tampon bellegi (Socket Buffer) ile belirlenir. Varsayilan bir Linux kurulumunda her TCP soketi icin 128 KB ila 256 KB tampon ayrildiginda, 50.000 baglanti tek basina 12 GB'tan fazla RAM tuketir ve sunucunun kilitlenmesine neden olur.
Bu parametreler min default max seklinde 3 bayt degeri alir. Cekirdek, TCP Auto-Tuning (tcp_moderate_rcvbuf) mekanizmasiyla soketin ihtiyacina gore tamponu bu limitler arasinda dinamik ayarlar. C100K WebSocket senaryolarinda min degeri 4096 bayt (4KB) tutularak, bosta bekleyen baglantilarin minimum RAM tuketmesi saglanir.
tcp_rmem bayt cinsindenken, tcp_memx86 mimarisindeki 4096-baytlik bellek sayfalari (pages) cinsinden tanimlanir:low, pressure ve max esikleri bulunur. Sistemdeki tum TCP soketlerinin toplami pressuresinirini astiginda kernel ag tamponlarini zorla kucultur; max asildiginda ise yeni baglantilari reddeder (drop eder).
Yalnizca birkaç yuksek hizli dosya aktarimi yapildiginda soket tamponlarini 8 MB veya 16 MB yapmak tam ag verimliligi saglar. Ancak eszamanli 100.000 baglanti karsilayan bir sunucuda her sokete 8 MB tavan verilmesi, birkac agir baglantinin tum sunucu RAM'ini somurerek diger istemcilerin kopmasina yol acar. Bu yuzden yuksek eszamanlilikta azami tamponlar kucuk tutulmalidir.
Linux'ta "her sey bir dosyadir" felsefesi gecerlidir; her ag soketi bir dosya tanimlayicidir (file descriptor). Varsayilan ulimit -n 1024 degeri degistirilmezse, sunucuda 100 GB RAM olsa dahi 1024. baglantidan sonra Too many open files hatasi alinir. Bu nedenle/etc/security/limits.conf dosyasinda nofilesiniri en az 1.048.576 seviyesine yukseltilmelidir.