RAM yani bellek yerine Linux’de takas alanı kullanmanın çalışan uygulamalarda performansı ciddi şekilde yavaşlatabileceğine dair söylentilerin olduğunu biliyoruz.
Bu gibi durumlarda sorulan en temel sorulardan bazıları ise şunla;
- Günümüzde takas alanına gerek yok?
- Takas alanı oluşturmasam ne olur?
bilinenin aksine yeterli ram yani bellek miktarına sahip olsanız bile, takas alanı etkinleştirildiğinde inanmayacaksınız ama performans avantajları var. Çünkü unix işletim sistemlerinde uygulamalar temelinde takas alanı olacak şekilde geliştirilir.
Hemen bir örnek ile bu duruma göz atalım.
root@ankara:~# free -h
total used free shared buff/cache available
Mem: 7.6Gi 2.0Gi 162Mi 119Mi 5.5Gi 5.2Gi
Swap: 9Gi 1.0Mi 9Gi
Yukarıda görmüş olduğunuz çıktıda 8GB ram bulunan bir sunucuda 10 GB kadar swap alanı ayırdığımı fark etmişsinizdir, hali hazırda kullanılan 1M bir takas alanı var. Peki bu kadar boş bellek varken niye hala takas alanını kullanıyor? Hangi İşlemin Takas Alanını Kullandığını Öğrenmek adlı makalemize göz atabilirsiniz.
Bazı arkadaşlar zaman zaman fark etmişlerdir swap alanı kullanan süreçler aslında tam olarak çalışmıyor(Nasıl laaa), sistemde kullanılabilir bellek olsa bile kimi zaman takas alanı ciddi oranlarda kullanılabilir. Millet bu durumdan korkup ya takas alanını kapatır yada boşaltmaya çalışır ancak bu durum unix işletim sistemleri için gayet normaldir.
Kernel aslında burada belleği daha efektif bir şekilde kullanmaya çalışır.
Linux kernel yani çekirdek, neredeyse hiç kullanılmayan bellek alanlarını takas alanına taşıyarak, daha sık kullanılan bellek alanları için daha da fazla önbelleğe alınabilir alan yaratır ki size gün sonunda kullandığınız bellek yetsin. Özetle RAM kernel tarafından aslında temizlenir.
Yeteri Kadar Belleğe Sahip Sistemlerde Takas Alanının Avantajları
Yukarıda bahsettiğim durum kimi zaman içe ve dışa bellek alanlarını taşımaktan dar boğaza sebep olabilir bu noktada performans sorunu oluşabilir. (Çok düşük bir ihtimal) Ama sağlıklı bir unix sistemde yeterli oranda bellek olsa bile takas alanı oluşturmak elzemdir.
Peki bu avantajlarımız neler?
- Sistemde bol miktarda kullanılabilir RAM olsa bile, kernel hiç kullanılmayan bellek alanını takas alanına taşır.(her zaman)
- Bir süre etkin olmayan bellek alanlarını hep değiştirir ve sık kullanılan verileri önbellekte tutar.(mevcut yaptığınız işlemler hızlanır)
- Performans sorunlarının, kesintilerin ve/veya yanıt sürenizin uzamasına takas alanınız neden oluyorsa tespit etmeniz kolaylaşır.
- Bazı uygulamaların daha hızlı çalışmasına olanak tanınır.
- Takas devre dışı bırakıldığı anda, performans sorunlarını hızlı bir şekilde fark edebilirsiniz.(makalemizin devamında anlatacağımız
OOM Killer
çalışır.)
Şimdi bazıları toplam ram boyutundan fazla takas alanı oluşturmayın der(sebebini bilmiyorum), bu noktada internette araştırmalarınızı yapın geçerli bir kanıt bulursanız toplam bellek miktarınızın üstüne çıkartmayın. Ancak Debian ve Ubuntu‘nun bu konu hakkında dediklerini dikkate almanızda fayda var.
Sunucularda bu sebeple takas alanı oluşturma kararı bir kişinin fantazilerine göre değil üzerinde çalışacak uygulamanın kullandığı belleğe göre belirlenmesi şarttır. Swap(takas) alanı sağlıklı bir unix sunucusu için mutlaka gereklidir. Unix uygulamaları swap alanı kullanılacak şekilde tasarlanır ve geliştirilir.
Sorulması gereken sorular
- Sistemin amacı ney ne için kullanılacak?
- Üzerinde koşacak uygulama/uygulamalar ne kadar bellek tüketecek?
- Koşacak uygulama ileride ne kadar büyüyebilir?
- Kritik işlemler yürütülen bir sistem mi?
- Dosya aktarmak amacıyla diskler çok fazla aktif bir şekilde kullanılıyor mu?
Kullanılabilir Bellek Azaldı Ama Hala Takas Alanı Boş Niye?
Şimdi gelelim yukarıda bahsettiğim durumdan bağımsız olarak yapılacakları anlatmaya, yeterli belleğe sahipsiniz ama sisteminizde herhangi bir uygulama sizin belirledikleriniz dışında çok fazla RAM tüketiyor diyelim.
Takas alanı herhangi bir ani bellek gereksinimi sırasında belirli bir süre tepki vermeden bekleyebilir bir süre belleğin düşmesini beklemesi olağandır, sizin gördüğünüzün aksine belleğinizin tamamı kullanılmıyor olabilir.
Bunlar dışında yeterli belleğiniz yoksa ve takas alanınızda yoksa o zaman vay halinize çalışan süreçleriniz bir bir kapatılmaya başlar.
Bellek arayışı içerisinde olan süreçler örneğin MySQL, MsSQL veya NGINX gibi süreçleri bir bakmışsınız anında kapatmış ve bellek ihtiyacını karşılamaya çalışmış evet bunu kernel son çare olarak yapar ama kesinlikle yapar. OOM(Out of memory) Killer
denir buna ve yüksek bellek kullanan süreçler sırasıyla kapatılmaya başlar. İşte bu süreç devreye girerse takas alanına giriş yapmadığını görürsünüz.
Kernel Üzerinde “Cache Pressure” ve “Swappiness” Nasıl Yapılandırılır?
Şimdi sıra geldi “Cache Pressure” ve “Swappiness” ayarlamalarını yapmaya, yani özetle bellek yetersizliğinde politika belirleyeceğiz.
swappiness
Kernel’in bellek alanını ne kadar agresif bir şekilde değiştireceğini tanımlamak için kullandığımız parametredir yani ne kadar düşük tutarsanız o oranla takas değişikliğini önlemiş olursunuz.
Yüksek bir değer verirseniz o kadar ağresif davranır ve takas alanı büyüyerek kullanılmaya devam eder, daha düşük değer verilmesi takas alanı kullanım miktarını azaltır. (varsayılan değer 60 dır, önerilen değerler de 1 ile 60 arasındadır.) Asla sıfır olarak ayarlamayın.
Özet: 10 yaparsanız belleğiniz yüzde 80, 90 aralığında kullanıldığında takas alanı devreye girer.
Ön tanımlı olarak sonucumuz
root@ankara:~# cat /proc/sys/vm/swappiness
60
Değişikliğimizi yapıyoruz.
sysctl -w vm.swappiness=10
Değişiklik yaptıktan sonra ise sonucumuz
root@ankara:~# cat /proc/sys/vm/swappiness
10
vfs_cache_pressure
Kernel’in, dizin ve inode nesnelerinin önbelleğe alınması için sıklıkla kullanılır (varsayılan değer 100 dür, önerilen değer ise 50 ila 200 arasındadır.)
Ön tanımlı olarak sonucumuz
root@ankara:~# cat /proc/sys/vm/vfs_cache_pressure
100
Değişikliğimizi yapıyoruz.
sysctl -w vm.vfs_cache_pressure=50
Değişiklik yaptıktan sonra ise
root@ankara:~# cat /proc/sys/vm/vfs_cache_pressure
50
Bu değişiklikleri geçerli kılmak için /etc/sysctl.conf
içerisine aşağıdaki satırlamayı eklemeyi unutmayın.
vm.swappiness=10
vm.vfs_cache_pressure=50
Windows ve Unix Sistemlerde takas alanı ne kadar olmalıdır?
Kişisel bilgisayarlarınızda eğer uyku modu kullanıyorsanız, işletim sistemi ve platform bağımsız olarak 64 GB belleğin olduğu bir sistemde, SWAP yani takas alanınız 72 GB ve üstü olmalıdır.
Eğer bu sistemde uyku modu kullanılmayacaksa 64 GB belleğin olduğu bir sistemde 16 GB takas alanı tanımlanması yeterlidir.