Merhaba arkadaşlar, bugün sizlere özellikle yüksek trafikli sunucularınızda disk I/O yükünü hafifletecek ve sitenizin hızını gözle görülür şekilde artıracak bir optimizasyon yönteminden bahsedeceğim. Benim de kendi sunucularımda sıkça uyguladığım bu yöntem, Nginx ve LiteSpeed gibi web sunucularının oluşturduğu geçici cache dosyalarını, yavaş disk yerine hızlı RAM belleğinde tutmayı sağlıyor. Bu sayede önbellek okuma/yazma işlemleri inanılmaz hızlanıyor.
tmpfs Nedir ve Ne İşe Yarar?
tmpfs, Linux'ta geçici dosyaları depolamak için kullanılan ve tamamen RAM üzerinde çalışan bir dosya sistemidir. Disk I/O, özellikle SSD'lerde bile, RAM'e kıyasla çok daha yavaş kalır. Web sunucunuzun önbellek dosyalarını (örneğin, Nginx FastCGI cache veya LiteSpeed cache) buraya taşıdığınızda, sunucunuz bu dosyalara anında erişir. Şu ayara çok dikkat etmelisiniz: tmpfs'in içeriği sunucu yeniden başlatıldığında silinir. Bu nedenle sadece yeniden oluşturulması sorun olmayan, geçici veriler için kullanılmalıdır.
Adım 1: tmpfs Bağlama Noktası Oluşturma
İlk olarak, RAM'deki bu özel alanı sunucumuzda bir dizin olarak bağlayacağız. Genelde /tmp zaten tmpfs olarak gelir, ama biz web cache'i için özel ve daha kontrollü bir alan oluşturacağız.
Terminal'e bağlanıp aşağıdaki komutla dizini oluşturalım:
Şimdi, bu dizini tmpfs olarak sistem açılışında otomatik bağlanacak şekilde /etc/fstab dosyasına eklememiz gerekiyor. Bu dosyayı düzenlerken çok dikkatli olun, yanlış bir giriş sistemin açılmamasına neden olabilir.
Dosyanın en altına aşağıdaki satırı ekleyin. Burada size=512M parametresi, bu alan için maksimum 512 MB RAM ayrılacağını belirtir. Sunucunuzun RAM miktarına göre bu değeri (örn: 1G, 2G) artırabilirsiniz.
Dosyayı kaydedip çıkın (Ctrl+X, sonra Y, sonra Enter). Değişikliği hemen etkinleştirmek için aşağıdaki komutu çalıştırın:
Komutun hiçbir hata vermediğinden emin olun. Ardından, bağlama işleminin başarılı olup olmadığını kontrol edelim:
Çıktıda /var/cache/ramdisk satırını ve "tmpfs" yazdığını görmelisiniz.
Adım 2: Nginx için FastCGI Cache Dizininin Taşınması
Eğer Nginx kullanıyorsanız ve FastCGI caching aktifse, cache dizinini yeni oluşturduğumuz ramdisk'e yönlendirelim. Öncelikle mevcut Nginx cache konfigürasyon dosyanızı bulun. Genellikle /etc/nginx/nginx.conf veya /etc/nginx/sites-available/siteniz dosyasındadır.
İçinde şuna benzer bir satır arayın:
Buradaki disk yolu olan /var/cache/nginx kısmını, ramdisk içinde oluşturacağımız yeni bir alt dizine işaret edecek şekilde değiştirelim. Önce ramdisk içinde dizini oluşturalım:
Şimdi Nginx konfigürasyon satırını şöyle güncelleyin:
Değişiklikten sonra Nginx'i test edip yeniden başlatalım:
Dikkat Edilmesi Gerekenler
Bu optimizasyon güçlü olsa da bazı noktalara dikkat etmezseniz sorun yaşayabilirsiniz:
1. RAM Boyutu: size= parametresi ile ayırdığınız alan, toplam RAM'inizi aşmamalı. Cache için ayırdığınız miktar, sunucunuzda çalışan diğer servislerin (MySQL, PHP-FPM) ihtiyacından çalmamalı.
2. Veri Kalıcılığı: RAM'deki veriler sunucu yeniden başlatılınca kaybolur. Bu, cache için sorun değildir (yeniden oluşturulur), ancak kalıcı olması gereken hiçbir veriyi buraya koymayın.
3. Swap Kullanımı: Eğer tmpfs için ayırdığınız alan dolmaya başlarsa ve RAM de tükenirse, sistem swap kullanmaya başlayabilir ki bu durum performansı tam tersine çok kötü etkiler. free -h komutu ile RAM kullanımınızı düzenli takip edin.
LiteSpeed Kullanıcıları İçin
LiteSpeed Web Server kullanıyorsanız, işlem benzer. LiteSpeed'in cache dizini genellikle /tmp/lscache veya /usr/local/lsws/cachedata gibi bir yerdedir. Yapmanız gereken, LiteSpeed yapılandırma arayüzünde (WebAdmin Konsolu) veya doğrudan konfigürasyon dosyalarında (/usr/local/lsws/conf/httpd_config.xml) cache path'ini ramdisk'e işaret edecek şekilde değiştirmek. Örneğin, önce ramdisk'te bir dizin oluşturun:
Ardından LiteSpeed ayarlarında cache yolunu bu yeni dizin olarak güncelleyin ve servisi yeniden başlatın.
Sonuç olarak, bu optimizasyon özellikle disk I/O'nun darboğaz olduğu durumlarda sitenize ciddi bir nefes aldıracaktır. Benim sunucularda genelde kullandığım yöntem budur ve özellikle yoğun trafik anlarında farkı hissedersiniz.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Ya da takıldığınız bir yer olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.
tmpfs, Linux'ta geçici dosyaları depolamak için kullanılan ve tamamen RAM üzerinde çalışan bir dosya sistemidir. Disk I/O, özellikle SSD'lerde bile, RAM'e kıyasla çok daha yavaş kalır. Web sunucunuzun önbellek dosyalarını (örneğin, Nginx FastCGI cache veya LiteSpeed cache) buraya taşıdığınızda, sunucunuz bu dosyalara anında erişir. Şu ayara çok dikkat etmelisiniz: tmpfs'in içeriği sunucu yeniden başlatıldığında silinir. Bu nedenle sadece yeniden oluşturulması sorun olmayan, geçici veriler için kullanılmalıdır.
İlk olarak, RAM'deki bu özel alanı sunucumuzda bir dizin olarak bağlayacağız. Genelde /tmp zaten tmpfs olarak gelir, ama biz web cache'i için özel ve daha kontrollü bir alan oluşturacağız.
Terminal'e bağlanıp aşağıdaki komutla dizini oluşturalım:
Bash:
sudo mkdir -p /var/cache/ramdisk
Şimdi, bu dizini tmpfs olarak sistem açılışında otomatik bağlanacak şekilde /etc/fstab dosyasına eklememiz gerekiyor. Bu dosyayı düzenlerken çok dikkatli olun, yanlış bir giriş sistemin açılmamasına neden olabilir.
Bash:
sudo nano /etc/fstab
Dosyanın en altına aşağıdaki satırı ekleyin. Burada size=512M parametresi, bu alan için maksimum 512 MB RAM ayrılacağını belirtir. Sunucunuzun RAM miktarına göre bu değeri (örn: 1G, 2G) artırabilirsiniz.
Kod:
tmpfs /var/cache/ramdisk tmpfs defaults,size=512M,noatime,nodiratime,mode=1777 0 0
Dosyayı kaydedip çıkın (Ctrl+X, sonra Y, sonra Enter). Değişikliği hemen etkinleştirmek için aşağıdaki komutu çalıştırın:
Bash:
sudo mount -a
Komutun hiçbir hata vermediğinden emin olun. Ardından, bağlama işleminin başarılı olup olmadığını kontrol edelim:
Bash:
df -h | grep ramdisk
Çıktıda /var/cache/ramdisk satırını ve "tmpfs" yazdığını görmelisiniz.
Eğer Nginx kullanıyorsanız ve FastCGI caching aktifse, cache dizinini yeni oluşturduğumuz ramdisk'e yönlendirelim. Öncelikle mevcut Nginx cache konfigürasyon dosyanızı bulun. Genellikle /etc/nginx/nginx.conf veya /etc/nginx/sites-available/siteniz dosyasındadır.
İçinde şuna benzer bir satır arayın:
NGINX:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:100m inactive=60m;
Buradaki disk yolu olan /var/cache/nginx kısmını, ramdisk içinde oluşturacağımız yeni bir alt dizine işaret edecek şekilde değiştirelim. Önce ramdisk içinde dizini oluşturalım:
Bash:
sudo mkdir -p /var/cache/ramdisk/nginx
sudo chown -R www-data:www-data /var/cache/ramdisk/nginx
Şimdi Nginx konfigürasyon satırını şöyle güncelleyin:
NGINX:
fastcgi_cache_path /var/cache/ramdisk/nginx levels=1:2 keys_zone=MYCACHE:100m inactive=60m;
Değişiklikten sonra Nginx'i test edip yeniden başlatalım:
Bash:
sudo nginx -t
sudo systemctl reload nginx
Bu optimizasyon güçlü olsa da bazı noktalara dikkat etmezseniz sorun yaşayabilirsiniz:
1. RAM Boyutu: size= parametresi ile ayırdığınız alan, toplam RAM'inizi aşmamalı. Cache için ayırdığınız miktar, sunucunuzda çalışan diğer servislerin (MySQL, PHP-FPM) ihtiyacından çalmamalı.
2. Veri Kalıcılığı: RAM'deki veriler sunucu yeniden başlatılınca kaybolur. Bu, cache için sorun değildir (yeniden oluşturulur), ancak kalıcı olması gereken hiçbir veriyi buraya koymayın.
3. Swap Kullanımı: Eğer tmpfs için ayırdığınız alan dolmaya başlarsa ve RAM de tükenirse, sistem swap kullanmaya başlayabilir ki bu durum performansı tam tersine çok kötü etkiler. free -h komutu ile RAM kullanımınızı düzenli takip edin.
LiteSpeed Web Server kullanıyorsanız, işlem benzer. LiteSpeed'in cache dizini genellikle /tmp/lscache veya /usr/local/lsws/cachedata gibi bir yerdedir. Yapmanız gereken, LiteSpeed yapılandırma arayüzünde (WebAdmin Konsolu) veya doğrudan konfigürasyon dosyalarında (/usr/local/lsws/conf/httpd_config.xml) cache path'ini ramdisk'e işaret edecek şekilde değiştirmek. Örneğin, önce ramdisk'te bir dizin oluşturun:
Bash:
sudo mkdir -p /var/cache/ramdisk/lscache
sudo chown -R lsadm:lsadm /var/cache/ramdisk/lscache
Ardından LiteSpeed ayarlarında cache yolunu bu yeni dizin olarak güncelleyin ve servisi yeniden başlatın.
Sonuç olarak, bu optimizasyon özellikle disk I/O'nun darboğaz olduğu durumlarda sitenize ciddi bir nefes aldıracaktır. Benim sunucularda genelde kullandığım yöntem budur ve özellikle yoğun trafik anlarında farkı hissedersiniz.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Ya da takıldığınız bir yer olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.