İçindekiler
Swap, diskte ayrılmış ve fiziksel bellek (RAM) dolduğunda ya da çekirdek gerekli gördüğünde kullanılan bir alandır. Bellekteki az kullanılan sayfalar diske taşınır ve yer açılır. Bu sayfalara tekrar ihtiyaç duyulduğunda diskten geri okunur.
Diskin RAM'den yüzlerce, hatta binlerce kat yavaş olduğunu düşünürseniz, swap'ın bir performans aracı olmadığı açıktır. Swap bir emniyet sübabıdır.
Swap ne işe yarar?
1. Ani bellek baskısında çökmeyi önler. Bir yedekleme betiği ya da beklenmedik bir trafik artışı belleği kısa süreliğine aşarsa, swap yoksa çekirdeğin OOM killer'ı devreye girer ve bir süreci, genellikle veritabanını, zorla sonlandırır. Swap varsa sistem yavaşlar ama çalışmaya devam eder.
2. Atıl belleği değerlendirir. Bir sunucuda açılışta yüklenen ama neredeyse hiç kullanılmayan servisler ve kütüphaneler vardır. Çekirdek bunları swap'a taşıyarak, sık kullanılan veriler ve disk önbelleği için RAM'de yer açabilir. Bu, swap'ta biraz veri görmenin neden sorun olmadığını açıklar.
3. Uyku moduna geçiş (hibernation). Masaüstü sistemlerde bellekteki her şey swap'a yazılır. Sunucularda bu kullanılmaz.
Swap kullanımı ne zaman sorundur?
Swap'ta birkaç yüz megabayt veri görmek, tek başına bir sorun değildir. Önemli olan, sürekli bir trafik olup olmadığıdır:
vmstat 2
procs -----------memory---------- ---swap-- -----io----
r b swpd free buff cache si so bi bo
1 0 51200 180000 42000 2100000 0 0 5 20
3 2 812000 40000 8000 310000 420 980 1600 2400
si(swap in) veso(swap out) sütunları sürekli sıfırsa: Swap'ta veri olsa bile şu anda kullanılmıyor. Sorun yok.- Bu sütunlarda sürekli hareket varsa (ikinci satır gibi): Sistem bellekle diske sürekli veri taşıyor. Buna thrashing denir ve sunucu çok yavaşlar. Gerçek bir bellek sıkıntısı var demektir. Çözüm daha fazla swap değil, bellek kullanımını azaltmak ya da RAM eklemektir.
Ne kadar swap?
Eski "RAM'in iki katı" kuralı, belleğin çok pahalı ve küçük olduğu dönemlerden kalma. Bugün sunucular için makul bir yaklaşım:
RAM Önerilen swap
≤ 2 GB RAM kadar
2 – 8 GB RAM'in yarısı
8 – 64 GB 4 GB civarı
> 64 GB Birkaç GB, iş yüküne göre
Amaç, belleği ikiye katlamak değil, ani baskılarda sisteme biraz nefes aldırmaktır.
Küçük bir VPS'e swap eklemek
Bulut sağlayıcılarının sunduğu küçük sanal sunucuların pek çoğu swap olmadan gelir. Bir swap dosyası eklemek birkaç dakika sürer:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
Kalıcı olması için /etc/fstab dosyasına ekleyin:
/swapfile none swap defaults 0 0
Kontrol edin:
swapon --show
free -h
chmod 600 adımını atlamayın. Swap dosyası bellekteki verilerin, yani şifrelerin ve oturum bilgilerinin de diskteki kopyasını içerebilir. Başkaları tarafından okunmamalıdır.
Not: Bazı dosya sistemlerinde (örneğin Btrfs) ya da bazı ortamlarda fallocate ile oluşturulan dosya swap olarak kullanılamayabilir. Bu durumda dd if=/dev/zero of=/swapfile bs=1M count=2048 komutu aynı işi görür.
swappiness: Çekirdek swap'ı ne kadar istekle kullansın?
vm.swappiness değeri, çekirdeğin bellek baskısı altında dosya önbelleğini boşaltmak ile uygulama belleğini swap'a taşımak arasındaki tercihini belirler. 0 ile 200 arasında bir değerdir. Varsayılan genellikle 60'tır.
cat /proc/sys/vm/swappiness
- Düşük değer (örneğin 10): Çekirdek uygulamaları RAM'de tutmayı tercih eder, önce disk önbelleğini boşaltır. Veritabanı sunucuları ve gecikmeye duyarlı uygulamalar için sık önerilir.
- Yüksek değer: Atıl uygulama belleği daha istekle swap'a taşınır, disk önbelleğine daha fazla yer kalır.
Değiştirmek için:
sysctl vm.swappiness=10
echo "vm.swappiness=10" > /etc/sysctl.d/99-swappiness.conf
Bu ayar sihirli bir hızlandırıcı değildir. Çoğu sunucu için varsayılan değer de iyi çalışır. Değiştirmeden önce gerçekten bir sorun yaşadığınızdan emin olun.
Swap'ı tamamen kapatmak?
Bazı ortamlarda swap bilinçli olarak kapatılır. Örneğin Kubernetes uzun süre düğümlerde swap'ın kapalı olmasını istedi. Bunun sebebi, bellek sınırlarının öngörülebilir olmasıdır. Ama sıradan bir web ya da veritabanı sunucusunda swap'ı kapatmak, ani bellek baskılarında yavaşlama yerine doğrudan bir sürecin öldürülmesi anlamına gelir. Çoğu durumda küçük bir swap alanı tutmak daha güvenlidir.
Özet
Swap'ta biraz veri görmek normaldir. Sürekli swap trafiği ise gerçek bir bellek sıkıntısının işaretidir. Küçük bir sunucuya birkaç gigabaytlık swap dosyası eklemek, OOM killer'ın veritabanınızı gece yarısı sonlandırmasını önlemenin en ucuz yoludur. Ama swap'a sürekli dayanan bir sunucunun asıl ihtiyacı, daha fazla RAM ya da daha az bellek tüketen bir yapılandırmadır.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.