Mövzunu Açan
#1
Sunucu Swap Kullanımı Nasıl Azaltılır?
Tüm sunucu türlerinde temel hedef, RAM yetersizliğinden kaynaklanan swap kullanımını minimize etmek ve IO gecikmesini azaltmaktır. Aşağıdaki adımlar hem güvenli hem de uygulanabilir yönergeler olarak tasarlanmıştır; her biri gerçek dünya senaryolarında test edilmeli ve mevcut yapılandırmaya göre uyarlanmalıdır.
- Anlık durum analiziyle başlayın: swap kullanımını azaltmaya gitmeden önce mevcut bellek kullanımını anlamak gerekir. free -h, top, htop, vmstat -s gibi araçlarla RAM kullanımı, free RAM, cache ve swap miktarını izleyin. Özellikle swapिन/ swapout hızlarını iostat veya sar -bs komutlarıyla takip edin. HDD yerine SSD veya NVMe kullanan sistemlerde swap davranışı farklılık gösterebilir; bu yüzden depolama altyapısının etkisini ölçün.
- Swap alanını ayarlayın: swap boyutunun yeterli olması hem güvenlik sağlar hem de anlık aşırı bellek taleplerini tolere eder. Ancak çok büyük swap, bellek boştayken dahi disk IO’yu meşgul eder. Sunucu profilinize göre swap dosyasını veya partition’ı yeniden boyutlandırın. Örneğin, hafıza kullanımınız %70-80’e yaklaştığında, swap dosyasını dinamik olarak artırıp azaltabileceğiniz yapılandırmalarla ilerlemek mantıklı olabilir. Şirket içi standartlarda ise genelde en az 1-2GB boş RAM hedeflenir ve swap alanı toplam RAM’in 1-2 katından büyük olmamalıdır.
- Swappiness değerini optimize edin: Linux çekirdeği, bellek doluluk durumu için hangi tarafa öncelik vereceğini swappiness parametresiyle belirler. Değeri 60 civarında olan varsayılan ayar, sistemin swap’a daha erken yönelmesine neden olabilir. Sunucu ihtiyacına göre bu değeri düşürün; örnek olarak 20-40 arası bir değer, sık swap kullanımını azaltabilirken hızlı yanıtı da koruyabilir. Değişikliği kalıcı yapmak için /etc/sysctl.conf’a vm.swappiness=20 gibi eklemeler yapın ve sysctl -p ile uygulayın.
- Bellek dostu süreçler: RAM’i yoğun kullanan uygulamaların davranışlarını gözden geçirin. Java, PostgreSQL, Redis gibi hizmetlerin bellek yapılandırmalarını inceleyin: heap/arena ayarları, cache boyutları, sorgu önbelleği ayarları. Bellek sızıntısı veya beklenenin üzerinde bellek tüketimi, sürekli swap’a itebilir. Gerekirse sınırlandırma (cgroups) ile süreç başına maksimum bellek limiti koyun veya sık kullanılan hizmetleri ayrı makinelerde çalıştırın.
- Disk IO ve depolama performansı: Swap kullanımı çoğunlukla zayıf disk IO kapasitesinden de kaynaklanır. Veritabanı CRT kullanımı, günlük dosyalarının yazımı veya log rolder’lar IO’yu bitirebilir. Diskleşme işlemlerini hafifletmek için belirli blok boyutları, yazma tamponları ve sıralama politikalarını gözden geçirin. Ayrıca sunucunun depolama altyapısını izlemek için fio veya ioping gibi araçlarla kapasite ve gecikme testleri yapın.
- Bellek sıkıştırması ve donanım hızlandırması: bazı sistemlerde ZRAM gibi sıkıştırılmış swap alanları, gerçek disk swap yerine RAM içi sıkıştırma ile performans iyileştirmesi sağlar. Ancak bu yaklaşım her yük altında fayda sağlamayabilir; test edilerek karar verin. Ayrıca bellek hızını artırmak için RAM miktarını artırmak çoğu durumda en güvenli çözümdür; maliyet/performans dengesi olarak düşünülmelidir.
- Uygulama- ve iş yükü ayrıştırması: Sanal makineler veya konteynerler kullanılıyorsa, bellek baskısının belirli bir host üzerinde yoğunlaşması durumunda diğer hizmetler etkilenebilir. Kaynakları kısıtlayıcı politikalar uygulayın; cgroups/kuberenetes limits ve requests ile bellek paylaşımını kontrollü hale getirin. Yük dengeleme ve planlama süreçlerini bellek tüketim trendlerine göre güncelleyin.
Sonuç olarak, swap kullanımını azaltmak için yapılandırma, monitöring ve iş yükü tasarımını bir bütün olarak ele almak gerekir. Doğru ayar ve düzenli inceleme ile bellek performansı stabilize edilerek yanıt süreleri iyileştirilebilir. Bu konudaki deneyimleriniz hangi platformlarda ve hangi değerlerle başarıya ulaştı?
