Sunucu “yavaşladı” diyorsunuz, disk ışığı sürekli yanıyor, RAM dolu görünüyor ama işlemci boşta. Çoğu zaman mesele işlemci değil: fiziksel bellek tükendi, sistem de diski bellek gibi kullanmaya başladı. Windows’ta buna sanal bellek (pagefile), Linux’ta SWAP diyoruz. Bu yazıda ikisinin mantığını, Windows’ta GUI ve PowerShell ile ayarını, Linux’ta modern swapfile kurulumunu ve swappiness ince ayarını sahadan örneklerle anlatıyoruz.
Sanal bellek ve SWAP ne işe yarar?
RAM hızlıdır ama sınırlıdır. İşletim sistemi, bellek daraldığında ya da uzun süredir dokunulmayan sayfaları kenara çekmek istediğinde diskin bir bölümünü geçici bellek gibi kullanır. Windows’ta bu dosya genelde C:\pagefile.sys, Linux’ta ise ayrı bir bölüm veya /swapfile dosyasıdır.
Windows’ta sanal bellek (pagefile)
Windows varsayılan olarak pagefile boyutunu kendisi yönetir. Çoğu masaüstü için bu yeterlidir. Sunucularda veya belirli uygulamalarda (SQL Server, büyük yığınlar, bellek dökümü ihtiyacı) sabit boyut tercih edilir; böylece ani büyümeler disk alanını yemez, parçalanma da azalır.
Grafik arayüzden ayarlama
- Win + R ile
sysdm.cplyazıp Enter’a basın. - Gelişmiş sekmesinde Performans → Ayarlar’a tıklayın.
- Yine Gelişmiş sekmesinde Sanal bellek → Değiştir.
- “Tüm sürücülerde disk belleği dosyası boyutunu otomatik yönet” işaretini kaldırın.
- Sürücüyü seçip Özel boyut ile başlangıç ve en büyük değeri MB cinsinden girin (örnek: 8192 = 8 GB). İkisini aynı yapmak sabit boyut demektir.
- Ayarla → Tamam; değişiklik çoğu zaman yeniden başlatma ister.
PowerShell ile sorgulama ve sabit boyut
Mevcut ayarı görmek için:
# Mevcut pagefile ayarı
Get-CimInstance -ClassName Win32_PageFileSetting
# Otomatik yönetimin durumu
Get-CimInstance -ClassName Win32_ComputerSystem |
Select-Object AutomaticManagedPagefileOtomatik yönetimi kapatıp C: için sabit 8 GB atamak:
# Otomatik boyutu kapat
Set-CimInstance -Query "Select * from Win32_ComputerSystem" -Property @{
AutomaticManagedPagefile = $false
}
# C: için sabit 8 GB (8192 MB)
Set-CimInstance -ClassName Win32_PageFileSetting -Property @{
InitialSize = 8192
MaximumSize = 8192
}Win32_PageFileSetting nesnesi henüz yoksa (otomatik yönetim yeni kapatıldıysa) önce oluşturmanız gerekir:
$page = ([WmiClass]'Win32_PageFileSetting').CreateInstance()
$page.Name = 'C:\pagefile.sys'
$page.InitialSize = 8192
$page.MaximumSize = 8192
$page.Put()Değişikliklerin aktif olması için sunucuyu yeniden başlatın. Sonrasında Görev Yöneticisi → Performans → Bellek bölümünden “Takaslanan” / “Commit” değerlerini, veya Kaynak İzleyicisi’nden pagefile kullanımını izleyebilirsiniz.
Linux’ta SWAP: bölüm mü, dosya mı?
Eski alışkanlık disk bölümlenirken ayrı bir swap partition açmaktı. Bulut VPS’lerde ve modern dağıtımlarda esnek olan swapfile tercih ediliyor: sistem çalışırken oluşturulur, boyutu saniyeler içinde büyütülür veya silinir; disk yeniden boyutlandırmaya gerek kalmaz.
| Swap partition | Swapfile | |
|---|---|---|
| Kurulum | Disk bölümlenirken ayrılır | Çalışan sistemde dosya olarak oluşturulur |
| Boyut değiştirmek | Zor; çoğu zaman yeniden boyutlandırma | Kolay; dosyayı yeniden oluşturup etkinleştirirsiniz |
| Tipik yer | Eski kurulumlar, özel depolama düzenleri | VPS, Ubuntu/Debian varsayılanları, hızlı müdahale |
1. Swap dosyasını oluşturun
4 GB’lık bir /swapfile örneği:
# 4 GB boş dosya (çoğu dosya sisteminde en hızlı yol)
sudo fallocate -l 4G /swapfile
# fallocate sorun çıkarırsa (bazı Btrfs/XFS senaryoları):
# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress2. İzinleri sıkılaştırın
Yalnızca root okuyup yazabilmeli:
sudo chmod 600 /swapfile3. Biçimlendirip etkinleştirin
sudo mkswap /swapfile
sudo swapon /swapfile4. Kalıcı hale getirin (/etc/fstab)
Yeniden açılışta otomatik gelsin diye /etc/fstab’a ekleyin:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab5. Doğrulayın
sudo swapon --show
free -hswapon --show satırında /swapfile ve 4G civarı bir boyut görmelisiniz. free -h çıktısındaki Swap satırı da aynı kapasiteyi gösterir.
Linux swappiness: ne zaman takasa düşsün?
vm.swappiness, çekirdeğin RAM dolmadan SWAP’a ne kadar hevesli olduğunu belirler; 0–100 arasıdır. Yüksek değer = daha erken takas; düşük değer = mümkün olduğunca RAM’de tut.
| Değer | Davranış (kabaca) | Ne zaman? |
|---|---|---|
| 60 (varsayılan) | RAM henüz dolmadan pasif sayfaları SWAP’a itmeye başlar | Masaüstü için kabul edilebilir; sunucuda gereksiz disk I/O üretebilir |
| 10 | Takası ciddi bellek baskısına saklar | Çoğu uygulama / web / veritabanı sunucusu için iyi başlangıç |
| 1 | Neredeyse yalnızca OOM (Out of Memory) eşiğine yakın takas | Bol RAM’li, gecikmeye hassas iş yükleri (dikkatli kullanın) |
# Anlık (yeniden açılışa kadar)
sudo sysctl vm.swappiness=10
# Kalıcı
echo "vm.swappiness=10" | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --systemtee -a yerine yukarıda dosyayı doğrudan yazıyoruz; böylece aynı satır conf dosyasında birikmez. Mevcut değeri görmek için: cat /proc/sys/vm/swappiness.