Bir sunucunun RAM'i dolmaya başladığında ne olur? İyi bir tampon yoksa çekirdek OOM (Out Of Memory) mekanizmasını devreye sokar ve en çok bellek kullanan süreci aniden öldürür; genellikle bu, tam da çalışmasını istediğiniz veritabanı veya web uygulamasıdır. İşte swap alanı, tam bu senaryoyu yumuşatmak, ani bellek dalgalanmalarında sunucunun çökmesini önlemek için vardır.
Bu rehberde swap'in ne olduğunu, RAM ile arasındaki farkı, swap file ile adım adım nasıl bir swap alanı oluşturacağınızı, bunu yeniden başlatmalarda kalıcı kılmayı ve swappiness ile davranışını ayarlamayı ele alacağız. Özellikle küçük RAM'li VPS'lerde swap, hayat kurtaran bir güvenlik ağıdır. Temel komut bilginizi tazelemek isterseniz Linux temel komutları yazımız iyi bir başlangıç.
Swap Nedir ve Neden Gereklidir?#
Swap, sabit disk (veya SSD) üzerinde ayrılmış, RAM'in bir uzantısı gibi kullanılan bir alandır. RAM dolduğunda çekirdek, o an aktif olarak kullanılmayan bellek sayfalarını bu swap alanına taşır (buna "swap out" denir) ve böylece RAM'de aktif işler için yer açar. Sayfaya tekrar ihtiyaç duyulduğunda geri okunur ("swap in").
Swap'in birincil amacı ek "hız" sağlamak değildir; çünkü disk, RAM'den kat kat yavaştır. Asıl amacı bir güvenlik tamponu sunmaktır. Swap olmadan RAM tükendiğinde OOM Killer devreye girer ve süreçleri zorla sonlandırır. Swap varsa, sistem geçici yükü diske taşıyarak bu ani ölümü önler ve size müdahale etmek için zaman kazandırır.
Swap'in ikinci faydası, uzun süredir kullanılmayan "atıl" bellek sayfalarını diske taşıyarak RAM'i gerçekten aktif veriler ve disk önbelleği için serbest bırakmasıdır. Bu, düşük bellek baskısı altında bile sistem performansını iyileştirebilir. Ancak dikkat: swap bir "daha fazla RAM" ikamesi değildir. Sürekli yoğun swap kullanımı (swap thrashing) sunucuyu felç eder; gerçek çözüm RAM'i artırmaktır. Swap yalnızca ara sıra oluşan tepe yüklerin sigortasıdır.
RAM ile Swap Arasındaki Fark#
RAM (fiziksel bellek), işlemcinin doğrudan ve çok hızlı eriştiği geçici bellektir. Swap ise disk üzerinde yer alır ve çok daha yavaştır. Aradaki hız farkı, bir NVMe SSD'de bile onlarca kat, klasik bir HDD'de yüzlerce kat olabilir. Bu yüzden ikisini birbirinin yerine koymak doğru değildir.
| Özellik | RAM | Swap |
|---|---|---|
| Konum | Fiziksel bellek çipleri | Disk / SSD üzerinde alan |
| Hız | Çok yüksek | Düşük (diske bağlı) |
| Amaç | Aktif verilerin işlenmesi | Bellek taşması tamponu |
| Kalıcılık | Yeniden başlatmada silinir | Yeniden başlatmada içeriği geçersiz olur |
| Maliyet | Pahalı | Ucuz (disk alanı) |
Pratikte doğru yaklaşım şudur: uygulamalarınızın normal çalışma seti daima RAM'e sığmalıdır. Swap yalnızca beklenmedik tepe yükler, kısa süreli bellek sıçramaları ve atıl sayfaların park edilmesi için devrede olmalıdır. free -h çıktısında swap'in sürekli ve yoğun dolu olduğunu görüyorsanız bu, RAM'inizi yükseltme zamanının geldiğinin işaretidir.
Swap File ile Swap Partition Karşılaştırması#
Swap alanını iki şekilde oluşturabilirsiniz: ayrı bir disk bölümü (swap partition) olarak veya normal bir dosya (swap file) olarak. Eskiden partition yöntemi standarttı, ancak modern çekirdeklerde swap file yöntemi neredeyse aynı performansı verir ve çok daha esnektir.
Swap file'ın avantajı, mevcut dosya sisteminde herhangi bir yeniden bölümleme yapmadan oluşturulabilmesi ve boyutunun kolayca değiştirilebilmesidir. İhtiyacınız artınca dosyayı büyütür, azalınca küçültürsünüz; disk düzenini hiç bozmazsınız. Bu yüzden özellikle VPS ve bulut sunucularında swap file en pratik yöntemdir ve bu rehberde onu kullanacağız.
Swap partition ise ayrı, adanmış bir disk bölümü gerektirir. Genellikle işletim sistemi kurulumu sırasında oluşturulur. Kurulum sonrasında yeni bir partition açmak, mevcut diski yeniden düzenlemeyi gerektirdiği için risklidir. Zaten swap partition'ınız varsa onu kullanmaya devam edebilirsiniz; ancak sonradan swap eklemek istiyorsanız swap file kesinlikle daha güvenli ve kolaydır.
Adım Adım Swap File Oluşturma#
Aşağıdaki adımlar Ubuntu, Debian, Rocky Linux ve AlmaLinux dahil hemen tüm modern dağıtımlarda çalışır. Root veya sudo yetkisine ihtiyacınız olacak. Örneğimizde 2 GB'lık bir swap file oluşturacağız.
Önce mevcut durumu kontrol edin; belki zaten bir swap'iniz vardır:
# Aktif swap alanlarını göster (boşsa hiç swap yok demektir)
sudo swapon --show
# Bellek ve swap özetini insan-okur biçimde göster
free -h
Şimdi swap file'ı oluşturun. Modern sistemlerde fallocate en hızlı yöntemdir:
# 2 GB'lik bir dosya ayır
sudo fallocate -l 2G /swapfile
Bazı dosya sistemlerinde (ör. eski ext3 veya bazı sanallaştırma ortamları) fallocate beklendiği gibi çalışmayabilir. O durumda dd ile oluşturun; bu yavaş ama her yerde güvenilirdir:
# Alternatif: dd ile 2 GB (2048 MB) dosya oluştur
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
Dosyayı oluşturduktan sonra izinlerini kısıtlamanız güvenlik açısından önemlidir; swap içeriğini başka kullanıcılar okuyamamalıdır. Ardından dosyayı swap olarak biçimlendirip aktif edin:
# Sadece root okuyup yazabilsin
sudo chmod 600 /swapfile
# Dosyayı swap alanı olarak biçimlendir
sudo mkswap /swapfile
# Swap'i hemen etkinleştir
sudo swapon /swapfile
# Doğrula: artık swap listesinde /swapfile görünmeli
sudo swapon --show
free -h
Bu noktada swap aktiftir ama henüz kalıcı değildir; sunucuyu yeniden başlatırsanız kaybolur. Kalıcı hale getirmek için /etc/fstab dosyasına bir satır eklemeniz gerekir:
# fstab'a swap girişini ekle (yedeğini alarak)
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Artık her yeniden başlatmada swap otomatik olarak devreye girer. Değişikliğin doğru olduğunu test etmek için sudo swapoff /swapfile && sudo swapon -a komutlarını çalıştırıp hata alıp almadığınızı kontrol edebilirsiniz; hata yoksa fstab satırınız sorunsuzdur.
Doğru Swap Boyutu Nasıl Belirlenir?#
Swap boyutu için tek bir doğru cevap yoktur; sunucunuzun RAM miktarına ve iş yüküne bağlıdır. "Hibernate" (diske uyku) özelliğine ihtiyaç duyan masaüstü sistemlerde swap en az RAM kadar olmalıdır, ancak sunucularda hibernate genelde kullanılmadığı için daha esnek davranabilirsiniz. Aşağıdaki tablo pratik bir başlangıç noktası sunar:
| Sistem RAM'i | Önerilen swap (sunucu) |
|---|---|
| 512 MB – 1 GB | RAM'in 2 katı (1–2 GB) |
| 2 GB | 1–2 GB |
| 4 GB | 2–4 GB |
| 8 GB | 2–4 GB |
| 16 GB ve üzeri | 2–4 GB (veya minimum) |
Genel kural şudur: RAM ne kadar azsa swap'in RAM'e oranı o kadar yüksek olmalı; RAM ne kadar çoksa swap o kadar sembolik kalabilir. 16 GB RAM'li bir sunucuda 32 GB swap açmak neredeyse hiçbir zaman mantıklı değildir; çünkü o kadar swap'e gerçekten ihtiyaç duyulduğu noktada sistem zaten kullanılamaz hale gelmiştir. Amaç, ani ve kısa süreli bellek sıçramalarına tampon oluşturmaktır, RAM'i disk üzerinden ikame etmek değil.
Swappiness ile Davranışı Ayarlama#
Çekirdeğin swap'i ne kadar "istekli" kullandığını vm.swappiness parametresi belirler. Değer 0 ile 100 arasındadır. Yüksek değer, çekirdeği daha erken ve daha sık swap'e yönlendirir; düşük değer ise swap'i mümkün olduğunca sonraya bırakıp RAM'i tercih ettirir.
Çoğu sunucu dağıtımında varsayılan değer 60'tır; bu masaüstü için uygun olsa da, diski RAM'den çok daha yavaş olan sunucularda genellikle fazla agresiftir. Veritabanı ve web sunucuları için 10 civarı bir değer yaygın olarak önerilir; böylece swap sadece gerçekten gerektiğinde devreye girer.
# Mevcut swappiness değerini gör
cat /proc/sys/vm/swappiness
# Anlık olarak 10'a ayarla (yeniden başlatınca sıfırlanır)
sudo sysctl vm.swappiness=10
Bu ayarı kalıcı yapmak için /etc/sysctl.conf dosyasına (veya /etc/sysctl.d/ altında bir dosyaya) eklemeniz gerekir:
# Kalıcı ayar
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
# Değişikliği hemen yükle
sudo sysctl -p
Benzer şekilde vm.vfs_cache_pressure parametresi de dosya sistemi önbelleğinin ne kadar agresif boşaltılacağını etkiler; ancak çoğu sunucu için varsayılanı bırakmak yeterlidir. Önce swappiness'i ayarlayıp sistemin davranışını free -h ve vmstat ile bir süre gözlemlemeniz en sağlıklı yaklaşımdır.
Doğrulama ve İzleme#
Swap'i kurduktan sonra doğru çalıştığını ve sistemin nasıl davrandığını düzenli izlemek önemlidir. En temel iki komut free -h ve swapon --show'dur:
# Bellek ve swap özeti
free -h
# Aktif swap alanları ve doluluk
swapon --show
# Süreç bazında en çok swap kullananları gör (top içinde)
top -o %MEM
vmstat ile swap giriş-çıkış hızını izleyebilirsiniz. Çıktıdaki si (swap in) ve so (swap out) sütunları sürekli ve yüksek değer gösteriyorsa sisteminiz swap thrashing yaşıyor demektir ve bu ciddi bir uyarıdır:
# Her 2 saniyede bir örnek al, 5 kez
vmstat 2 5
Sağlıklı bir sunucuda swap belirli bir seviyede dolu olabilir ama si/so değerleri çoğu zaman sıfıra yakın olmalıdır; yani veri sürekli oraya buraya taşınmamalıdır. Swap doluluğu ve OOM riski, sunucunuzun genel sağlığının bir parçasıdır; kaynak izleme ve sertleştirme konularında sunucu güvenliği temelleri yazımızda daha geniş bir çerçeve bulabilirsiniz.
zram ile Sıkıştırılmış Bellek Alternatifi#
Diske dayalı klasik swap'e modern bir alternatif de zram'dır. zram, RAM'in bir bölümünü sıkıştırılmış bir swap alanı olarak kullanır; yani veriyi diske yazmak yerine bellekte sıkıştırarak saklar. Sonuç, disk swap'inden çok daha hızlı ama gerçek RAM'den daha yavaş, buna karşılık RAM'de daha fazla veri sığdıran bir ara katmandır. Özellikle diski yavaş olan veya SSD aşınmasını en aza indirmek isteyen sunucular için caziptir.
zram'ı kurmak çoğu dağıtımda tek bir paketle mümkündür:
# Ubuntu/Debian üzerinde zram-tools kur
sudo apt update && sudo apt install zram-tools
# Rocky/AlmaLinux üzerinde
sudo dnf install zram-generator
Kurulumdan sonra swapon --show çıktısında zram tabanlı bir swap satırı (genellikle /dev/zram0) görürsünüz ve önceliği (priority) diske dayalı swap'ten yüksek olur; yani çekirdek önce zram'ı kullanır, dolarsa disk swap'ine geçer. Küçük RAM'li VPS'lerde disk swap'i ile zram'ı birlikte kullanmak; hem hızlı bir ilk tampon hem de daha büyük ama yavaş bir ikinci tampon sağlayan dengeli bir yapı kurar. Yine de zram RAM tükettiği için abartmamak, tipik olarak RAM'in yarısını geçmeyen bir zram boyutu seçmek gerekir.
SSD, Aşınma ve VPS'lerde Swap#
Modern sunucular çoğunlukla SSD (özellikle NVMe) diskler kullanır. SSD'ler sınırlı yazma döngüsüne sahip olduğu için "swap SSD'yi aşındırır mı?" sorusu haklı bir endişedir. Pratikte, doğru boyutlandırılmış ve swappiness değeri makul tutulmuş bir swap alanı modern kurumsal SSD'lerin ömrü için ihmal edilebilir bir yük oluşturur. Aşınma asıl olarak sürekli, yoğun swap trafiğinde (thrashing) sorun olur ki bu zaten performans açısından da kabul edilemez bir durumdur ve çözümü RAM eklemektir.
VPS ve bulut sunucularında ek bir incelik vardır: bazı sanallaştırma platformları (özellikle OpenVZ tabanlı olanlar) swap dosyası oluşturmaya izin vermez veya farklı davranır. KVM tabanlı sanal sunucularda ise swap file yöntemi tıpkı fiziksel sunucudaki gibi sorunsuz çalışır. Clou.TR'nin sanal sunucularında tam çekirdek erişimi olduğu için bu rehberdeki adımların tamamını uygulayabilirsiniz.
Küçük RAM'li VPS'lerde swap özellikle değerlidir; çünkü ani bir trafik artışında veya bir derleme işlemi sırasında RAM tükenip uygulamanızın OOM Killer tarafından öldürülmesini önler. Yine de swap'i bir "sonsuz bellek" gibi görmeyin: sürekli swap'e bel bağlayan bir sistemin gerçek ihtiyacı daha fazla RAM'dir. Swap sadece nadir tepe yükler için bir sigortadır.
Sıkça Sorulan Sorular#
Sunucumda kaç GB swap oluşturmalıyım?#
Genel kural, RAM az olduğunda swap'i RAM'in 1-2 katı, RAM bol olduğunda ise 2-4 GB civarında sabit tutmaktır. Örneğin 2 GB RAM'li bir VPS için 2 GB, 8 GB RAM'li bir sunucu için 2-4 GB swap makul bir başlangıçtır. Sunucularda hibernate kullanmadığınız için RAM'inizin tamamı kadar veya daha fazla swap açmanıza genellikle gerek yoktur.
Swap file mı yoksa swap partition mı kullanmalıyım?#
Modern çekirdeklerde swap file ile swap partition arasında kayda değer bir performans farkı yoktur, bu yüzden çoğu durumda swap file tercih edilir. Swap file'ı diski yeniden bölümlemeden oluşturabilir, boyutunu istediğiniz zaman kolayca değiştirebilirsiniz. Zaten kurulumda oluşmuş bir swap partition'ınız varsa onu kullanmaya devam edebilirsiniz; ama sonradan swap eklemek istiyorsanız swap file çok daha güvenli ve pratiktir.
swappiness değerini kaç yapmalıyım?#
Sunucular için 10 civarı bir değer yaygın olarak önerilir; bu, çekirdeğin swap'i yalnızca gerçekten gerektiğinde kullanmasını, mümkün olduğunca RAM'i tercih etmesini sağlar. Varsayılan olan 60 masaüstü sistemler için uygundur ama diski RAM'den çok yavaş olan sunucularda çoğu zaman fazla agresiftir. Değeri sudo sysctl vm.swappiness=10 ile deneyip, kalıcı yapmak için /etc/sysctl.conf dosyasına eklemelisiniz.
Swap RAM'in yerini tutar mı?#
Hayır, swap RAM'in yerini tutmaz; disk üzerinde yer aldığı için RAM'den kat kat yavaştır. Swap yalnızca ani bellek taşmalarında bir güvenlik tamponu ve atıl bellek sayfaları için bir park alanıdır. Uygulamalarınızın normal çalışma seti sürekli swap'e taşıyorsa performans ciddi biçimde düşer; bu durumda gerçek çözüm swap'i büyütmek değil, RAM'i yükseltmektir.
Swap SSD diskimi aşındırır mı?#
Doğru boyutlandırılmış ve makul bir swappiness ile yapılandırılmış swap, modern SSD'lerin ömrü için ihmal edilebilir bir yazma yükü oluşturur. Aşınma asıl olarak sürekli ve yoğun swap trafiğinde (thrashing) sorun olur, ki bu durum zaten performans açısından da kabul edilemezdir. Bu tür bir durumda çözüm swap'i kısıtlamak değil, RAM ekleyerek swap'e olan bağımlılığı ortadan kaldırmaktır.
Oluşturduğum swap'i nasıl kaldırırım?#
Önce sudo swapoff /swapfile ile swap'i devre dışı bırakın, ardından /etc/fstab dosyasından eklediğiniz swap satırını silin ki yeniden başlatmada tekrar devreye girmesin. Son olarak sudo rm /swapfile ile dosyayı diskten kaldırabilirsiniz. Bu işlem sırasında sistemin swap'te tutulan veriyi RAM'e geri taşıması gerektiği için, o an RAM'inizde yeterli boş alan olduğundan emin olun.
Kapanış#
Swap alanı, bir Linux sunucusunun ani bellek dalgalanmalarına karşı en basit ve etkili sigortasıdır. Swap file ile birkaç komutta oluşturabilir, /etc/fstab ile kalıcı kılabilir ve swappiness ile davranışını iş yükünüze göre ayarlayabilirsiniz. Yine de unutmayın; swap bir tampondur, RAM'in ikamesi değildir.
Tüm bu ayarları özgürce yapabilmeniz için tam kök erişimine ve gerçek kaynaklara ihtiyacınız var. Clou.TR'nin sanal sunucuları ve yüksek performanslı VDS çözümleri KVM tabanlı olduğu için swap dahil tüm çekirdek ayarlarını kısıtlamasız uygulayabilirsiniz. Bellek yönetimi ve sunucu bakımını uzmanlara bırakmak isterseniz sunucu yönetimi hizmetimize göz atabilir, ihtiyacınıza uygun bir paket için tüm sunucu seçeneklerimizi inceleyebilirsiniz.