SSL/TLS sunan bir servisin bellek kullanımı zamanla tırmanıyor ve yeniden başlatmadan sonra düşüyorsa, bağlantı başına tutulan TLS durumu veya oturum önbelleği sorumlu olabilir. Gerçek bir sızıntı (leak) ile normal önbellek büyümesini ayırt etmek ilk adımdır.
Belirtiler
- Nginx/Apache/HAProxy çalışan süreçlerinin RSS değeri sürekli artıyor.
- Bellek, trafik düşse bile geri dönmüyor.
- OOM killer loglarında sunucu süreci görünüyor.
Olası nedenler
- Çok büyük veya sınırsız oturum önbelleği; çok sayıda keepalive bağlantısı ile TLS tamponları.
- Eski OpenSSL ya da modül sürümündeki hatalar.
- Kapatılmayan uzun ömürlü bağlantılar (WebSocket, yarım kalan el sıkışmalar).
- Üçüncü taraf modüllerin (Lua, WAF vb.) kaynak sızdırması.
Teşhis adımları
- Belleğin hangi süreçte arttığını izleyin.
- Aktif bağlantı sayısı ile belleği karşılaştırın; orantılıysa sızıntı değil, yük kaynaklıdır.
- Yazılım ve OpenSSL sürümünün güncel, yama almış olduğunu doğrulayın.
- Modülleri tek tek devre dışı bırakarak kaynağı daraltın.
ps -o pid,rss,cmd -C nginx --sort=-rss | head
ss -s
ss -tn state established '( sport = :443 )' | wc -l
Nginx ayar örneği
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_buffer_size 4k;
keepalive_timeout 30s;
Paylaşımlı (shared) oturum önbelleği, işçi süreçleri arasında tek bir bellek alanını kullanır ve boyutu sabittir. ssl_buffer_size değerini düşürmek bağlantı başına tamponu küçültür; ancak büyük yanıtlarda ek işlem yükü getirebilir, test ederek karar verin.
Önleme
Bellek için üst sınır ve alarm tanımlayın, sürümleri düzenli güncelleyin, değişiklikleri önce test ortamında deneyin. Yapılandırmanızı SSL kontrol aracıyla sınayabilirsiniz.