- Konu sahibi
- #1
Swap kullanımı artıyorsa önce swap’ı kapatmak yerine hangi sürecin belleği tükettiğini ve sistemin gerçekten bellek baskısı altında olup olmadığını ölçün. Ardından gereksiz süreçleri veya bellek sızıntısını düzeltin, gerekiyorsa RAM’i artırın ve
Swap, RAM’de yeterince yer kalmadığında Linux’un daha az kullanılan bellek sayfalarını disk üzerindeki ayrılmış alana taşımasıdır. Swap alanının dolu görünmesi tek başına performans sorunu anlamına gelmez; önemli olan sistemin sürekli olarak RAM ile disk arasında veri taşıyıp taşımadığıdır. Bu taşıma işlemi yoğunlaşıyorsa gecikme artar ve disk kullanımı yükselir.
İlk olarak genel bellek durumunu ve swap’ın ne kadar kullanıldığını kontrol edin:
Swap hareketliliğini görmek için
Çıktıdaki
Süreçlerin bellek kullanımını sıralamak için şu komutu çalıştırabilirsiniz:
Burada
Swap kullanımı belirli bir servisin yoğunlaşmasından sonra artıyorsa önce o servisin bellek sınırlarını ve çalışma modelini kontrol edin. Örneğin PHP-FPM’de fazla sayıda eşzamanlı çalışan süreç, veritabanında yüksek bağlantı sayısı veya kontrolsüz bir uygulama önbelleği RAM’i tüketebilir. Aynı şekilde, uzun süre çalışan bir süreçte bellek sızıntısı varsa swap ayarı sorunu yalnızca geciktirir.
İzlenecek sıra şu şekilde olmalıdır:
Mevcut değeri görün:
Geçici bir deneme için örneğin 10 değerini uygulayabilirsiniz:
Ardından birkaç dakika boyunca
Değerin yeniden başlatmadan sonra da korunmasını istiyorsanız, dağıtımınızın sysctl yapılandırma dosyasına şu satırı ekleyin:
Dosyayı kaydettikten sonra ayarı yeniden yükleyin:
Dağıtımın yapılandırma dosyalarının konumu değişebileceği için mevcut sysctl yapılandırma düzeninizi kullanın; aynı ayarı birden fazla dosyaya farklı değerlerle yazmayın. Son geçerli değeri tekrar
Swap alanını boşaltmak, swap kullanımının nedenini çözmez. RAM’de yeterli boş alan olduğundan emin olmadan swap’ı kapatıp açmak, mevcut bellek baskısını artırabilir. Yalnızca aktif swap hareketi yoksa, yeterli
Örneğin tek bir swap alanını yeniden etkinleştirmek için genel sıra şöyledir:
Aşağıdaki ayrım karar vermeyi kolaylaştırır:
Swap kullanımı, sunucunun sürekli çalışma yükünde tekrarlanıyorsa yalnızca
Sunucu düzenli olarak aktif swap yapıyor, servis yapılandırmaları makul sınırlar içinde kalıyor ve yük azaltılamıyorsa RAM artırımı en doğrudan çözümdür. Swap, RAM’in yerine geçen hızlı bir bellek değildir; fiziksel bellek yetersizliğinde sistemi tamamen durdurmak yerine bir güvenlik payı sağlar, fakat yoğun kullanımda disk gecikmesini ortadan kaldırmaz.
vm.swappiness değerini iş yüküne uygun biçimde ayarlayın. Swap etkinliğini azaltmak mümkün olsa da swap alanını tamamen devre dışı bırakmak, fiziksel bellek tükendiğinde sistemi daha hızlı değil daha kırılgan hâle getirebilir.Önce swap kullanımının neden arttığını ölçün
Swap, RAM’de yeterince yer kalmadığında Linux’un daha az kullanılan bellek sayfalarını disk üzerindeki ayrılmış alana taşımasıdır. Swap alanının dolu görünmesi tek başına performans sorunu anlamına gelmez; önemli olan sistemin sürekli olarak RAM ile disk arasında veri taşıyıp taşımadığıdır. Bu taşıma işlemi yoğunlaşıyorsa gecikme artar ve disk kullanımı yükselir.
İlk olarak genel bellek durumunu ve swap’ın ne kadar kullanıldığını kontrol edin:
Bash:
free -h
swapon --show
free -h çıktısında özellikle available belleğe bakın. available değeri hâlâ yüksekse, swap’ın daha önce kullanılmış olması sistemin şu anda mutlaka bellek sıkıntısı yaşadığını kanıtlamaz. Linux, swap’a taşınmış sayfaları ihtiyaç duyulana kadar orada tutabilir.Swap hareketliliğini görmek için
vmstat kullanın:
Bash:
vmstat 1 10
Çıktıdaki
si ve so sütunları önemlidir. si, swap’tan RAM’e okunan; so ise RAM’den swap’a yazılan veri miktarını gösterir. Değerler sürekli olarak sıfırdan büyükse sistem aktif biçimde swap kullanıyor olabilir. Ara sıra görülen kısa süreli hareket, tek başına kalıcı bir performans sorunu değildir.Süreçlerin bellek kullanımını sıralamak için şu komutu çalıştırabilirsiniz:
Bash:
ps -eo pid,ppid,user,%mem,rss,cmd --sort=-%mem | head -n 20
Burada
%MEM fiziksel RAM kullanımını, RSS ise sürecin RAM’de tuttuğu yaklaşık miktarı gösterir. Listenin üstündeki sürecin gerçekten gereksiz olduğunu varsaymayın. Veritabanı, PHP-FPM, Java veya önbellek servisleri yüksek bellek kullanabilir; doğru işlem, servisi kapatmak değil, yapılandırmasını ve iş yükünü incelemektir.Bellek tüketen nedeni düzeltin
Swap kullanımı belirli bir servisin yoğunlaşmasından sonra artıyorsa önce o servisin bellek sınırlarını ve çalışma modelini kontrol edin. Örneğin PHP-FPM’de fazla sayıda eşzamanlı çalışan süreç, veritabanında yüksek bağlantı sayısı veya kontrolsüz bir uygulama önbelleği RAM’i tüketebilir. Aynı şekilde, uzun süre çalışan bir süreçte bellek sızıntısı varsa swap ayarı sorunu yalnızca geciktirir.
İzlenecek sıra şu şekilde olmalıdır:
- Swap artışının başladığı zamanı belirleyin ve aynı zaman aralığında servis günlüklerini, işlem sayısını ve RAM kullanımını karşılaştırın.
- En fazla bellek kullanan servisin yapılandırmasında çalışan süreç, bağlantı, önbellek veya iş kuyruğu sınırlarını inceleyin.
- Gereksiz servisleri kapatmadan önce hangi uygulamanın veya hizmetin onlara bağlı olduğunu kontrol edin.
- Yapılandırma değişikliğinden sonra servisi kontrollü biçimde yeniden başlatın ve
free -hilevmstat 1çıktısını yeniden izleyin.
vmstat içinde si/so değerleri sürekli hareket etmiyorsa neden büyük olasılıkla servis yükü veya yapılandırmasıdır. Swap doluluğu yüksek kalıyor ancak aktif taşıma yoksa bu durum eski swap sayfalarının beklemede tutulmasından kaynaklanabilir; doğrudan performans kaybı kanıtı değildir.değerini kontrollü ayarlayın
vm.swappiness, çekirdeğin swap kullanma eğilimini etkileyen bir ayardır. Değeri düşürmek swap kullanımını azaltabilir; ancak bu ayar RAM miktarını artırmaz ve bellek tüketen süreci düzeltmez. Çok düşük bir değer, RAM tamamen dolduğunda ani bellek baskısını artırabilir.Mevcut değeri görün:
Bash:
sysctl vm.swappiness
Geçici bir deneme için örneğin 10 değerini uygulayabilirsiniz:
Bash:
sudo sysctl vm.swappiness=10
Ardından birkaç dakika boyunca
free -h, vmstat 1 ve disk gecikmesini izleyin. Swap hareketi azalıyor, uygulama gecikmesi artmıyor ve RAM kullanımı kritik düzeye çıkmıyorsa bu değer iş yükünüz için uygun olabilir. Ancak yalnızca swap’ın doluluk yüzdesine bakarak karar vermeyin; si ve so hareketliliği ile uygulamanın yanıt süresini birlikte değerlendirin.Değerin yeniden başlatmadan sonra da korunmasını istiyorsanız, dağıtımınızın sysctl yapılandırma dosyasına şu satırı ekleyin:
Kod:
vm.swappiness=10
Dosyayı kaydettikten sonra ayarı yeniden yükleyin:
Bash:
sudo sysctl --system
Dağıtımın yapılandırma dosyalarının konumu değişebileceği için mevcut sysctl yapılandırma düzeninizi kullanın; aynı ayarı birden fazla dosyaya farklı değerlerle yazmayın. Son geçerli değeri tekrar
sysctl vm.swappiness ile doğrulayın.Swap alanını temizlemek ne zaman güvenlidir?
Swap alanını boşaltmak, swap kullanımının nedenini çözmez. RAM’de yeterli boş alan olduğundan emin olmadan swap’ı kapatıp açmak, mevcut bellek baskısını artırabilir. Yalnızca aktif swap hareketi yoksa, yeterli
available RAM varsa ve kısa süreli bir bakım penceresi planladıysanız kullanılabilir.Örneğin tek bir swap alanını yeniden etkinleştirmek için genel sıra şöyledir:
Bash:
free -h
vmstat 1 5
sudo swapoff /dev/XXX
sudo swapon /dev/XXX
swapon --show
free -h
/dev/XXX yerine swapon --show çıktısında görünen gerçek swap aygıtını veya dosyasını yazın. swapoff komutu başarısız olursa sistemde swap sayfalarını RAM’e alacak kadar boş bellek olmayabilir; işlemi zorlamayın. Önce bellek kullanan servisi azaltın veya RAM kapasitesini artırın.Aşağıdaki ayrım karar vermeyi kolaylaştırır:
| Gözlem | Anlamı | Sonraki işlem |
|---|---|---|
| Swap dolu, si/so çoğunlukla sıfır | Eski swap sayfaları bekliyor olabilir; aktif baskı kanıtı değildir. | available RAM ve uygulama gecikmesini izleyin; yalnız temizlik için swapoff yapmayın. |
| si/so sürekli yükseliyor | RAM ile disk arasında aktif taşıma vardır; bellek baskısı olasıdır. | En fazla bellek kullanan süreci inceleyin, yükü azaltın veya RAM ekleyin. |
| available RAM çok düşük, disk bekleme süresi yüksek | Swap işlemleri uygulama gecikmesine dönüşüyor olabilir. | Acil yükü azaltın; kalıcı çözüm olarak servis sınırlarını düzeltin veya RAM’i artırın. |
| Swap az kullanılıyor fakat uygulama yavaş | Sorun swap olmayabilir; CPU, disk, ağ veya uygulama kilitlenmesi de incelenmelidir. | CPU, disk gecikmesi, I/O beklemesi ve uygulama günlüklerini ayrıca ölçün. |
Kalıcı çözüm: yük ile RAM kapasitesini eşleştirin
Swap kullanımı, sunucunun sürekli çalışma yükünde tekrarlanıyorsa yalnızca
vm.swappiness değerini düşürmek kalıcı çözüm değildir. Aynı anda çalışan servislerin bellek üst sınırlarını belirleyin, gereksiz süreçleri kaldırın, uygulama veya veritabanı önbelleğini toplam RAM’e göre ayarlayın ve ani trafik artışlarını ayrıca izleyin.Sunucu düzenli olarak aktif swap yapıyor, servis yapılandırmaları makul sınırlar içinde kalıyor ve yük azaltılamıyorsa RAM artırımı en doğrudan çözümdür. Swap, RAM’in yerine geçen hızlı bir bellek değildir; fiziksel bellek yetersizliğinde sistemi tamamen durdurmak yerine bir güvenlik payı sağlar, fakat yoğun kullanımda disk gecikmesini ortadan kaldırmaz.