İçeriğe geç
Yeni yazı çıkınca e-posta · 4.812 abone 115 rehber · 78 ipucu · 8 komut RSS GitHub LinkedIn İletişim
Ara Bültene katıl
Bültene katıl 4.812 abone · yeni yazı çıkınca e-posta
Sanallaştırma

Hyper-V dinamik bellek ne zaman zarar verir?

Bellek tasarrufu sağlayan özellik, bazı iş yüklerinde performansı sessizce çökertir. Hangi makinede açıp hangisinde kapatmalı.

Mustafa Çelik 30 Ocak 2026 · 9 dk okuma

Bir SQL sunucusu ayda birkaç kez “yavaşlıyor” diye bildirildi. CPU boştaydı, disk kuyruğu normaldi. Sorun bellekteydi: sanal makinede dinamik bellek açıktı ve SQL Server, altından çekilen belleği sürekli geri kazanmaya çalışıyordu.

Dinamik bellek iyi bir özelliktir. Yanlış yerde açıldığında sessizce zarar verir.

Nasıl çalışır

Dinamik bellek, sanal makineye sabit bir miktar ayırmak yerine üç değer tanımlamanızı sağlar: başlangıç, minimum ve maksimum. Hyper-V, makinenin bellek baskısını izler ve gerektikçe ekler, gerekmedikçe balon sürücüsü aracılığıyla geri alır.

Geri alma mekanizması kritik ayrıntıdır: konuk işletim sistemi belleğin gittiğini bilir ve buna göre davranır. Sorun, bazı uygulamaların bu davranışı beklememesidir.

Kapatmanız gereken iş yükleri

SQL Server ve benzeri veritabanları. Bellek yöneticileri, başlangıçta gördükleri belleğe göre önbellek planlar. Bellek geri alındığında plan bozulur, disk okuması artar. Veritabanı sunucularında sabit bellek verin ve SQL’in kendi maksimum bellek ayarını yapın.

Exchange. Aynı sebep, aynı sonuç. Üretici de sabit bellek önerir.

Java uygulama sunucuları. JVM yığın boyutu başlangıçta belirlenir; altından bellek çekilirse takas (swap) başlar.

Yoğun önbellek kullanan her şey. Redis benzeri bellek içi sistemler.

Etki alanı denetleyicileri. AD veritabanını bellekte tutmayı sever; dinamik bellek altında çoğaltma ve LDAP yanıt süreleri dalgalanır.

Açmanın doğru olduğu yerler

Sanal masaüstleri. Onlarca makine, çoğu boşta. Dinamik bellek burada gerçek yoğunlaştırma sağlar.

Test ve geliştirme ortamları. Kullanılmayan makineler belleği geri verir.

Web ön uçları. Genelde bellek yoğun değildirler ve dalgalanmaya toleranslıdırlar.

Dosya ve yazıcı sunucuları. Talep öngörülebilir ve düşüktür.

Ayarları doğru vermek

Açacaksanız üç değeri de bilinçli seçin:

Set-VMMemory -VMName 'web01' `
  -DynamicMemoryEnabled $true `
  -MinimumBytes 1GB -StartupBytes 2GB -MaximumBytes 8GB `
  -Buffer 20 -Priority 50

Minimum çok düşük olursa makine boştayken belleği aşırı geri verilir ve yük geldiğinde toparlanması gecikir. İşletim sisteminin rahat çalışacağı seviyenin altına inmeyin.

Buffer, konuğa “yedek” olarak verilen ek yüzdedir. Ani yük artışlarında tampon görevi görür; düşük ayarlanırsa her sıçramada bellek talebi oluşur.

Priority, ana makinede bellek sıkışırsa hangi makinenin öncelikli olacağını belirler. Kritik makinelerde yükseltin.

Aşırı taahhüt (overcommit) tuzağı

Dinamik bellek, ana makinede olduğundan fazla bellek taahhüt etmenize izin verir. Bu genelde işe yarar — ta ki tüm makineler aynı anda yük altına girene kadar.

Ay sonu kapanışında, yedekleme penceresinde ya da bir olay sırasında makineler eşzamanlı olarak bellek ister ve ana makine veremez. Sonuç: hepsinde birden yavaşlama.

Bu yüzden taahhüt oranını izleyin ve kritik makineleri aşırı taahhüt edilen ana makinelere koymayın.

NUMA’yı unutmayın

Büyük sanal makinelerde bellek, fiziksel işlemci soketlerine dağılır. Bir makinenin belleği tek bir NUMA düğümüne sığmıyorsa uzak bellek erişimi başlar ve performans düşer.

Dinamik bellek, NUMA yerleşimini karmaşıklaştırır. Büyük veritabanı makinelerinde sabit bellek + NUMA hizalaması, dinamik bellekten kıyaslanamayacak kadar iyi sonuç verir.

Ana makineye de yer bırakın

Hyper-V ana makinesinin kendisi de bellek ister. Tüm belleği sanal makinelere taahhüt ederseniz ana makine takasa başlar ve üzerindeki her makine etkilenir.

Ana makineye en az 2–4 GB rezerv bırakın; depolama ve ağ rolleri de varsa daha fazlası gerekir.

Akıllı sayfalama tuzağı

Hyper-V, yeniden başlatma sırasında minimum bellekten başlangıç belleğine geçemezse “akıllı sayfalama” (smart paging) devreye girer ve diski bellek olarak kullanır. Geçicidir ama o sırada makine son derece yavaştır.

Bu duruma düşmemek için minimum belleği makul tutun ve akıllı sayfalama dosyasının hızlı bir diskte olduğundan emin olun:

Get-VM | Select-Object Name, SmartPagingFilePath
Set-VM -Name 'web01' -SmartPagingFilePath 'D:\SmartPaging'

Varsayılan olarak sanal makinenin yapılandırma dizinine yazılır; o dizin yavaş bir birimdeyse yeniden başlatmalar acı verir.

Konuk tarafını da ölçün

Ana makinedeki sayaçlar sanal makinenin bellek talebini gösterir, gerçekten ihtiyacını değil. Bir uygulama belleği tuttuğu hâlde kullanmıyorsa talep yüksek görünür.

Gerçek resmi görmek için konuk içinden bakın:

Get-Counter '\Memory\Available MBytes', '\Memory\Pages/sec' -SampleInterval 5 -MaxSamples 12

Pages/sec sürekli yüksekse makine takas yapıyordur — bu, bellek yetersizliğinin en net göstergesidir ve ana makinedeki “talep” sayacından çok daha güvenilirdir.

Doğrulama adımı

Ayarları değiştirdikten sonra bir hafta boyunca iki sayacı izleyin:

Get-VM | Select-Object Name, MemoryAssigned, MemoryDemand, MemoryStatus

MemoryStatus sürekli Warning ya da Low görünen makineler bellek açlığı çekiyordur — minimum değeri yükseltin. MemoryAssigned ile MemoryDemand arasındaki fark sürekli çok büyükse, gereğinden fazla tampon veriyorsunuz demektir.

Ve asıl test: kullanıcı şikâyetinin gelip gelmediği. Sayaçlar iyi görünürken şikâyet sürüyorsa, sorun bellekte değil — bakmaya oradan devam edin.

Mustafa Çelik

Kıdemli Sistem Yöneticisi, Ankara. 12 yıldır Windows Server, Active Directory ve ağ altyapısıyla uğraşıyor; öğrendiklerini bu blogda üretim ortamında denenmiş rehberlere çeviriyor.

Hakkımda

Bu rehber işinize yaradıysa, sonrakini kaçırmayın.

Yeni yazı yayınlandığında tek e-posta. Takvim yok, dilediğiniz an çıkabilirsiniz.

Bülten sağlayıcısı henüz bağlanmadı. Bağlanana kadar e-posta ile yazabilirsiniz ya da RSS akışını takip edebilirsiniz.