Merhaba arkadaşlar, bugün sizlere özellikle düşük RAM'e sahip sunucularımızda hayat kurtarıcı bir işlem olan swap alanı oluşturmayı ve bu swap'in ne kadar "agresif" kullanılacağını kontrol eden swappiness değerini performans için nasıl ayarlayacağımızı anlatacağım. Doğru yapılandırıldığında, sisteminizin olası bir RAM tükenmesi (OOM) durumunda çökmesini engeller ve genel istikrarını artırır.
Swap Nedir, Ne Zaman Gereklidir?
Swap, fiziksel RAM'iniz dolduğunda, işletim sisteminin sabit diskinizin (HDD/SSD) bir bölümünü geçici RAM gibi kullanmasıdır. Disk, RAM'den çok daha yavaş olduğu için performans düşer, ancak sisteminiz kilitlenmez. Özellikle VPS'lerde veya 2GB ve altı RAM'e sahip sunucularda mutlaka swap alanı oluşturmanızı öneririm. SSD'li sistemlerde swap kullanımı daha tolere edilebilir seviyededir.
Swap Dosyası Oluşturma Adımları
Öncelikle swap alanı oluşturmak için birkaç yöntem var. Ben genelde ayrı bir disk bölümü (partition) yerine, mevcut disk alanı üzerinde bir swap dosyası oluşturmayı tercih ediyorum. Daha esnek ve kolay.
İlk olarak, root kullanıcısı olarak (sudo -i veya sudo ile) aşağıdaki adımları takip ediyoruz. Diyelim ki 2GB'lık bir swap dosyası oluşturacağız.
1. Boş bir swap dosyası oluşturalım. Bu işlem /swapfile adında bir dosya yaratacak.
Eğer `fallocate` komutu hata verirse (eski sistemlerde olabilir), aşağıdaki daha yavaş ama garantili `dd` komutunu kullanabilirsiniz:
2. Oluşturduğumuz dosyanın güvenlik izinlerini sadece root'un okuyup yazabileceği şekilde ayarlayalım.
3. Şimdi bu dosyayı bir swap alanı olarak formatlayalım.
4. Swap dosyasını aktif hale getirelim.
5. Swap alanının kalıcı olması için, sistem açılışında otomatik mount edilmesi gerekiyor. Bunun için /etc/fstab dosyasını bir editörle (nano, vi) açıp en son satıra şu satırı ekliyoruz:
İşlem tamam! Hemen kontrol edelim:
veya
komutlarıyla swap alanınızın aktif olduğunu görebilirsiniz.
Swappiness Nedir? Neden Ayarlamalıyız?
Swappiness, çekirdeğin (kernel) fiziksel RAM'den swap alanına ne sıklıkla ve ne kadar erken sayfa (page) taşıyacağını kontrol eden 0 ile 100 arası bir değerdir. Varsayılan değer genellikle 60'tır.
Değer ne kadar YÜKSEKSE (100'e yakın), kernel RAM'i boş tutmak için swap'i daha "agresif" kullanır, daha çok disk yazma/okuma işlemi olur.
Değer ne kadar DÜŞÜKSE (0'a yakın), kernel RAM dolana kadar swap kullanmamaya çalışır. Sıfır (0) değeri, RAM tamamen dolana kadar swap kullanılmayacağı anlamına GELMEZ, sadece mümkün olduğunca engellenir.
Benim tavsiyem, sunucu/ masaüstü performansı için bu değeri düşürmeniz. Özellikle SSD'niz varsa, gereksiz yazma işlemlerini azaltmak için.
Swappiness Değerini Optimize Etme
Geçici olarak değeri değiştirmek için (sunucu yeniden başlayınca eski haline döner):
Değerin kalıcı olmasını istiyorsak, /etc/sysctl.conf dosyasını açıp en altına şu satırı eklemeliyiz:
Değişikliği kaydettikten sonra, sysctl.conf'daki değişiklikleri sisteme uygulayalım:
Mevcut swappiness değerinizi kontrol etmek için:
Ben kendi sunucularımda (çoğunlukla web/db sunucusu olarak) bu değeri genelde 10 ile 30 arasında bir yere ayarlıyorum. Eğer sunucunuzda çok fazla dosya önbellekleme (cache) işlemi yapılıyorsa (örneğin bir önbellek sunucusu), değeri biraz daha düşük tutabilirsiniz.
Son Kontroller ve Tavsiyeler
Her şeyi doğru yaptığınızdan emin olmak için birkaç komut daha çalıştıralım:
Son bir uyarı: Swap, RAM'in yerini tutan bir teknoloji değildir. Performans için asıl çözüm yeterli RAM'e sahip olmaktır. Swap, bir "emniyet kemeri" veya "son çare" olarak düşünülmelidir.
Umarım bu rehber faydalı olmuştur arkadaşlar. Siz bu swap ve swappiness ayarlarını kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya optimizasyon öneriniz var mı? Aklınıza takılan herhangi bir soru olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.
Swap, fiziksel RAM'iniz dolduğunda, işletim sisteminin sabit diskinizin (HDD/SSD) bir bölümünü geçici RAM gibi kullanmasıdır. Disk, RAM'den çok daha yavaş olduğu için performans düşer, ancak sisteminiz kilitlenmez. Özellikle VPS'lerde veya 2GB ve altı RAM'e sahip sunucularda mutlaka swap alanı oluşturmanızı öneririm. SSD'li sistemlerde swap kullanımı daha tolere edilebilir seviyededir.
Öncelikle swap alanı oluşturmak için birkaç yöntem var. Ben genelde ayrı bir disk bölümü (partition) yerine, mevcut disk alanı üzerinde bir swap dosyası oluşturmayı tercih ediyorum. Daha esnek ve kolay.
İlk olarak, root kullanıcısı olarak (sudo -i veya sudo ile) aşağıdaki adımları takip ediyoruz. Diyelim ki 2GB'lık bir swap dosyası oluşturacağız.
1. Boş bir swap dosyası oluşturalım. Bu işlem /swapfile adında bir dosya yaratacak.
Bash:
fallocate -l 2G /swapfile
Bash:
dd if=/dev/zero of=/swapfile bs=1M count=2048
2. Oluşturduğumuz dosyanın güvenlik izinlerini sadece root'un okuyup yazabileceği şekilde ayarlayalım.
Bash:
chmod 600 /swapfile
3. Şimdi bu dosyayı bir swap alanı olarak formatlayalım.
Bash:
mkswap /swapfile
4. Swap dosyasını aktif hale getirelim.
Bash:
swapon /swapfile
5. Swap alanının kalıcı olması için, sistem açılışında otomatik mount edilmesi gerekiyor. Bunun için /etc/fstab dosyasını bir editörle (nano, vi) açıp en son satıra şu satırı ekliyoruz:
Bash:
/swapfile none swap sw 0 0
İşlem tamam! Hemen kontrol edelim:
Bash:
swapon --show
Bash:
free -h
Swappiness, çekirdeğin (kernel) fiziksel RAM'den swap alanına ne sıklıkla ve ne kadar erken sayfa (page) taşıyacağını kontrol eden 0 ile 100 arası bir değerdir. Varsayılan değer genellikle 60'tır.
Değer ne kadar YÜKSEKSE (100'e yakın), kernel RAM'i boş tutmak için swap'i daha "agresif" kullanır, daha çok disk yazma/okuma işlemi olur.
Değer ne kadar DÜŞÜKSE (0'a yakın), kernel RAM dolana kadar swap kullanmamaya çalışır. Sıfır (0) değeri, RAM tamamen dolana kadar swap kullanılmayacağı anlamına GELMEZ, sadece mümkün olduğunca engellenir.
Benim tavsiyem, sunucu/ masaüstü performansı için bu değeri düşürmeniz. Özellikle SSD'niz varsa, gereksiz yazma işlemlerini azaltmak için.
Geçici olarak değeri değiştirmek için (sunucu yeniden başlayınca eski haline döner):
Bash:
sysctl vm.swappiness=10
Değerin kalıcı olmasını istiyorsak, /etc/sysctl.conf dosyasını açıp en altına şu satırı eklemeliyiz:
NGINX:
vm.swappiness=10
Değişikliği kaydettikten sonra, sysctl.conf'daki değişiklikleri sisteme uygulayalım:
Bash:
sysctl -p
Mevcut swappiness değerinizi kontrol etmek için:
Bash:
cat /proc/sys/vm/swappiness
Ben kendi sunucularımda (çoğunlukla web/db sunucusu olarak) bu değeri genelde 10 ile 30 arasında bir yere ayarlıyorum. Eğer sunucunuzda çok fazla dosya önbellekleme (cache) işlemi yapılıyorsa (örneğin bir önbellek sunucusu), değeri biraz daha düşük tutabilirsiniz.
Her şeyi doğru yaptığınızdan emin olmak için birkaç komut daha çalıştıralım:
Bash:
free -h
swapon --show
cat /proc/swaps
Son bir uyarı: Swap, RAM'in yerini tutan bir teknoloji değildir. Performans için asıl çözüm yeterli RAM'e sahip olmaktır. Swap, bir "emniyet kemeri" veya "son çare" olarak düşünülmelidir.
Umarım bu rehber faydalı olmuştur arkadaşlar. Siz bu swap ve swappiness ayarlarını kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya optimizasyon öneriniz var mı? Aklınıza takılan herhangi bir soru olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.