Konuya Giriş
Sunucunuzun uyumluluğunu artırmanın ve uygulamalarınızda “bellek yetersiz” (out of memory) hatalarını engellemenin en kolay yolu swap alanı yaratmaktır. “Swap”, işletim sistemi RAM üzerinde verileri tutamaz hale geldiğinde yani RAM yetersiz kaldığında, bu verileri geçici olarak saklamak için yer olarak tayin edilmiş sabit diskte bir alandır.
Temelde, bu size sunucunuzun belleği üzerinde tutulabilir bilgilerin miktarını artırma yeteneği kazandıracaktır. Diskteki “Swap” alanı RAM deki alan yetersiz hale geldiğinde kullanılacaktır.
Diske yazılan bilgilere ulaşılması RAM de saklananlara nazaran daha yavaş olacaktır fakat işletim sistemi herzaman çalışan verilere öncelik sağlayarak RAM üzerinde tutacak ve eski veriler için swap alanını kullanacaktır. Sonuç olarak swap alanı RAM tükendiğinde sisteminizin güvenliğini sağlayacaktır.
Yazımızda, Ubuntu 14.04 sunucusu üzerinde, bir swap dosyasını nasıl oluşturacağımızdan ve etkinleştireceğimizden bahsedeceğiz.
Sistemdeki Swap Varlığını Kontrol Edelim
Swap dosyası oluşturmaya başlamadan önce işletim sistemimizde daha önceden oluşturulmuş bir swap dosyası olup olmadığını kontrol edceğiz. Birden çok swap dosyasına sahip olabiliriz fakat bir tane olması genelde yeterli olacaktır.
Aşağıdaki komutu yazarak sistemimizde daha önce yapılandırılmış swap dosyası olup olmadığını görebiliriz:
sudo swapon -s
Yukarda görüldüğü üzere sadece tablonun başlığını çıktı olarak alırsanız etkin herhangi bir swap alanınız yoktur.
Swap alanını sorgulayabilmemiz için sık kullanılan bellek kullanımını gösteren bir başka yöntem ise “free” komutu dur. Aşağıdaki komut aracılığı ile mevcut bellek ve swap kullanımını Megabyte cinsinden görebiliriz:
free -m
Yukarda gördüğümüz üzere toplam swap alanımız “0” dır. Bir önceki çalıştırdığımız komut da aynı sonucu vermişti.
Diskteki Mevcut Kullanılabilir Alanı Kontrol İşlemi
Swap dosyamızı yaratmadan önce disk kullanım durumumuzu görmemiz gerekir. Bu bilgiye aşağıdaki komut sayesinde ulaşabiliriz:
df –h
İlk satırda gördüğümüz gibi 55 Gigabyte lık büyük miktarda serbest disk alanına sahibiz. Bu örnekte kullandığımız yeni kullanıma alınmış orta boyutlu bir sunucudur ve sizin kullanım alanınız çok farklı olacaktır.
“Swap” alanının boyutunu nasıl belirleyeceğimize dair birçok farklı görüş vardır. Bu alanın boyutu kişisel tercihlere ve kullanılan uygulamaların ihtiyaçlarına göre değişmektedir. Genel olarak, sistemde sahip olunan RAM miktarının iki katı kadar bir swap alanı başlangıç için uygun olacaktır.
Kullandığım sistem 4 GB RAM’e sahip ve bunun iki katı olacak swap alanı diskimde önemli miktarda alanı kullanacağından RAM miktarımla eşdeğer olacak 4GB lık bir swap alanı yaratmayı uygun buluyorum.
Swap Alanı Oluşturma İşlemi
Bu aşamada nekadar disk alanımız olduğunu biliyoruz ve sistemimizde swap dosyasını oluşturmaya başlayabiliriz.
Root klasörümüzün içinde “swapfile ” adında bir dosya oluşturacağız. Oluşturacağımız bu dosya swap dosyası için belirlediğimiz miktar kadar yer ayırmalıdır. Bu işlemi yapabilmek için birden çok yöntem kullanılabilmektedir. Önereceğim yöntem bunlardan en pratik ve hızlı olanıdır.
“fallocate” komutu aracılığı ile önceden belirlenmiş boyutta bir dosya oluşturuyoruz. Aşağıdaki komut aracılığı ile 4GB boyutunda bir dosya oluşturabiliriz:
sudo fallocate -l 4G /swapfile
Komut çalıştırıldıktan hemen sonra aşağıdaki sonucu bize dönecektir. Ayırmak istediğimiz alan kadar yer ayrılıp ayrılmadığını bu komut aracılığı ile teyit etmiş oluyoruz:
ls -lh /swapfile
Görüdüğümüz gibi istediğimiz boyutta bir dosyayı yaratmış bulunuyoruz.
Swap Dosyasını Etkinleştirme İşlemi
Bu aşamada dosyamız oluşmuştur fakat sistemimiz bu dosyanın swap olarak kullanılacağını bilmemektedir. Sistemimize bu dosyanın swap olarak formatlanmasını ve etkin hale getirilmesini söylememiz gerekiyor.
Yukarda bahsettiğimiz işlemi yapmadan önce dosyamızın yetkilerini ayarlayarak root kullanıcısı dışında kimsenin ulaşamamasını sağlamalıyız. Tüm kullanıcılara dosyamız üzerinde okuma yada yazma yetkisi vermemiz son derece büyük güvenlik riski oluşturacaktır. Aşağıdaki komut ile yetkileri sınırlayabiliriz:
sudo chmod 600 /swapfile
Dosyamızın doğru yetkilere sahip olduğunundan emin olabilmek için aşağıdaki komutu kullanıyoruz:
ls -lh /swapfile
Çıktıda görüldüğü gibi sadece root kullanıcısı okuma ve yazma yetkilerine sahip.
Artık dosyamız daha güvenli ve artık sistemimize swap alanı oluşturmasını aşağıdaki komut aracılığı ile söyleyebiliriz:
sudo mkswap /swapfile
Dosyamız swap alanı olarak kullanılmaya hazır. Swap alanımızı etkinleştirmek için aşağıdaki komutu kullanıyoruz:
sudo swapon /swapfile
Aşağıdaki komut aracılığı ile swap alanı oluşturma prosedürümüzün başarılı bir şekilde oluşup oluşmadığını teyit edebiliriz:
sudo swapon -s
Görüldüğü üzere artık yeni bir swap dosyamız var. “free” komutu aracılığı ile bulugularımızı doğrulayabiliriz:
free -m
Swap alanımız başarı ile oluşmuştur ve işletim sistemi gerektiğinde swap alanını kullanmaya başlayacaktır.
Swap Dosyasını Kalıcı Hale Getirme İşlemi
Swap dosyamız etkinleşti, fakat sitemimiz yeniden başladığında, sunucumuz otomatik olarak dosyamızı etkinleştirmeyecektir. “fstab” dosyasını değiştirerek swap alanımızı kalıcı hale getirebiliriz.
Root yetkisiyle dosyayı text editör aracılığı ile değiştiriyoruz:
sudo nano /etc/fstab
İşletim sistemimizin otomatik olarak yarattığımız swap dosyasını kullanması için “fstab” dosyasının en sonuna şu satırı eklemeliyiz:
/swapfile none swap sw 0 0
Değişikliği yaptıktan sonra dosyayı kaydedip kapatıyoruz.
Swap Ayarlarımızı Yapalım
Swap alanı oluştururken bilinmesi gereken sistem performansı üzerinde etkisi bulunan birkaç seçenek vardır.
“swappiness ” parametresi sisteminizin hangi sıklıkta swap alanına RAM’den veri taşıyacağını yapılandırır. Bu değer 0 ile 100 arasındadır ve yüzdeyi temsil eder.
Bu değer sıfıra yakın ise işletim sistemi çok gerekli olmadığında swap alanını kullanmayacaktır. Unutmayalım ki; swap alanı üzerindeki veri ile olacak etkileşim RAM üzerindekinden daha pahalıdır ve daha uzun bir süre almaktadır yani performansta önemli bir azalmaya neden olacaktır. Sistemimize swap alanına çok güvenmemesini söylemek sisteminizin daha hızlı olmasını sağlayacaktır.
100’e yakın değerler ise daha çok verinin swap alanına koyulmasına neden olacaktır ve RAM üzerinde daha çok boşluk olmasını amaçlayacaktır. Uygulamalarınızın bellek profillerine ve ne tür bir sunucu kullandığınıza göre bazı durumlarda daha iyi olabilir.
Şu anki swap alanımızı aşağıdaki komut aracılığı ile görebiliriz:
cat /proc/sys/vm/swappiness
60
Masaüstü bir uygulama söz konusuysa 60 uygun bir değer olabilir. Fakat sanal sunucu için konuşuyorsak 0’a yakın bir değer mantıklı olacaktır.
“swappiness” parametresini “sysctl” komutu aracılığı ile değiştirebiliriz.
Örnek olarak “swappiness” parametresini 10’a ayarlamak istiyorsak aşağıdaki komutu kullanırız:
sudo sysctl vm.swappiness=10
vm.swappiness = 10
Yaptığımız bu ayarlama sunucumuz yeniden başlayana kadar geçerlidir. Bu ayarlamayı kalıcı hale getirmek istiyorsak “/etc/sysctl.conf ” dosyasında değişiklik yapmamız gerekiyor. Öncelikle dosyamızı açıyoruz:
sudo nano /etc/sysctl.conf
Dosyanın en altına aşağıdaki satırı ekliyoruz:
vm.swappiness=10
Değişikliği yaptıktan sonra dosyayı kaydedip kapatıyoruz.
Değiştirmek isteyecebileceğimiz bir başka parametre de “vfs_cache_pressure” değeridir. Temelde bu değer dosya sistemi ile ilgilidir. Genellikle dosyaların browse edilmesi maaliyetli ve çok sık yapılan bir talep olduğundan sisteminiz için dosya bilgilerini cache’lemek son derece gereklidir. 50 ideal bir değerdir, 1 değerine doğru yaklaşmak çok fazla swap değeri yaratacağından önerilmez. Deneyerek te uygun değer bulunabilir.
Mevcut değeri aşağıdaki komut aracılığı ile görebiliriz:
cat /proc/sys/vm/vfs_cache_pressure
100
Mevcut konfigurasyonda sistemimiz dosya bilgilerini cache’den çok çabuk kaldırmakta. Aşağıdaki komut aracılığı ile “vfs_cache_pressure” değerini 50’ye getirerek bu bilgileri sistemimizin cache’de daha uzun süre muhafaza etmesini sağlayabiliriz:
sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
Yaptığımız ayarlamayı kalıcı hale getirmek için konfigurasyon dosyamıza “swappiness” ayarında olduğu gibi bir satır ekliyoruz. Öncelikle dosyamızı açıyoruz:
sudo nano /etc/sysctl.conf
Dosyanın en altına aşağıdaki satırı ekliyoruz:
vm.vfs_cache_pressure = 50
Değişikliği yaptıktan sonra dosyayı kaydedip kapatıyoruz.
Sonuç
Bu kılavuzdaki aşamalar RAM kullanımı ile ilgili önemli bilgiler vermektedir. Swap alanı herkezce karşılaşılan bazı ortak sorunları çözmekte son derece yararlıdır.
Eğer sunucunuz “bellek yetersiz” hataları alıyorsa, yada sisteminiz ihtiyacınız olan uygulamaları çalıştıramıyorsa, en iyi çözüm uygulamalarınızın ayarlarını optimize etmek ve sunucunuzu yükseltmektir. Swap alanını yapılandırmak size biraz daha esneklik sağlayabilir ve gereğinden daha düşük güçteki bir sunucu üzerinde çalışırken size zaman kazandırır.