- Konu sahibi
- #1
Swap kullanımı, RAM’in tamamen dolduğu anlamına gelmez; Linux, RAM’i daha verimli kullanmak veya bellek baskısını azaltmak için uzun süredir erişilmeyen bellek sayfalarını swap alanına taşıyabilir. Önce
Aşağıdaki komutlar farklı bilgileri gösterir:
Swap artışının yaygın nedenleri şunlardır:
Buradaki
Swap kullanımı yüksek görünse bile hemen swap’ı kapatmayın. Swap, RAM taşması sırasında süreçlerin sonlandırılmasını geciktirebilir; fakat yoğun swap etkinliği disk beklemelerine ve ciddi yavaşlamaya yol açar. Sorun RAM yetersizliğiyse swap’ı temizlemek yalnızca geçici rahatlama sağlar.
Bu işlemi yoğun saat dışında yapın ve önce
Geçici bir ayar için, örneğin varsayımsal olarak 10 değeri şöyle uygulanabilir:
Bu değişiklik yalnızca swap’a daha erken başvurmayı azaltabilir. Aktif bellek ihtiyacı RAM’i aşıyorsa düşük bir değer sorunu çözmez; sistem yine swap kullanabilir veya bellek yetersizliği yaşayabilir. Kalıcı ayar yapılacaksa dağıtımınızın sysctl yapılandırmasına eklenen değerin yeniden başlatma sonrasında da doğrulanması gerekir. Değeri düşürmeden önce
Swap kullanımı RAM boşken artmış,
free -h, swapon --show ve vmstat 1 çıktılarıyla gerçek bellek baskısını ayırın. RAM’de yeterli boşluk varsa swap’ı güvenli biçimde azaltmak için swapoff ile sayfaları RAM’e geri alıp yeniden swapon etkinleştirebilirsiniz; ancak RAM yetersizse bu işlem başarısız olabilir veya çalışan servisleri riske atabilir.Önce swap kullanımının neden arttığını belirleyin
Aşağıdaki komutlar farklı bilgileri gösterir:
Bash:
free -h
swapon --show
vmstat 1 5
free -h çıktısında özellikle available RAM değerine bakın. used değerinin yüksek olması tek başına sorun değildir; Linux dosya önbelleğini de RAM’de tutar. available düşükse ve swap doluluğu artıyorsa sunucuda gerçek bellek baskısı olabilir.swapon --show, kullanılan swap alanının dosya mı yoksa bölüm mü olduğunu ve ne kadarının dolu bulunduğunu gösterir. vmstat 1 5 çıktısında si ve so sütunları önemlidir. si RAM’e swap’tan okunan, so ise RAM’den swap’a yazılan miktarı gösterir. Bu değerler sürekli yüksekse sistem etkin biçimde swap yapıyor demektir. Değerler çoğunlukla sıfır, fakat swap kullanımı yüksekse sayfalar daha önce swap’a taşınmış ve şu anda aktif olarak geri dönmüyor olabilir.Swap artışının yaygın nedenleri şunlardır:
- Çalışan servislerin toplam bellek ihtiyacının RAM kapasitesini aşması.
- Veritabanı, PHP-FPM, Java veya benzeri süreçlerin zamanla bellek tüketimini artırması.
- Linux’un uzun süredir kullanılmayan bellek sayfalarını swap’a taşıması.
- Konteyner ya da servis başına tanımlanan bellek sınırlarının düşük olması.
- Ani trafik, yedekleme, derleme veya yoğun sorgu sırasında oluşan geçici bellek baskısı.
Bash:
ps -eo pid,ppid,comm,%mem,rss --sort=-rss | head -n 15
Buradaki
RSS değeri sürecin RAM’de tuttuğu fiziksel bellek miktarını yaklaşık olarak gösterir. Bu liste, swap kullanımının hangi sürecin swap’a taşındığını kesin olarak kanıtlamaz; ancak bellek tüketen servisleri incelemek için başlangıç noktasıdır.Sonucu ayırarak yorumlayın
| Gözlem | Anlamı | İzlenecek yol |
|---|---|---|
| available düşük, si/so sürekli yüksek | Aktif bellek baskısı var | Bellek tüketen servisi, trafik artışını ve limitleri inceleyin; gerekirse RAM artırın veya servis yükünü azaltın |
| available yeterli, si/so çoğunlukla sıfır | Swap’ta eski ve şu anda pasif sayfalar kalmış olabilir | RAM yeterliyse swap’ı kontrollü biçimde RAM’e geri taşıyın |
| Swap sürekli doluyor ve servisler yavaşlıyor | Sistem RAM kapasitesine dayanamıyor olabilir | Süreç bellek kullanımını ve OOM kayıtlarını inceleyin; yalnız swappiness değerini düşürmek kalıcı çözüm değildir |
Swap alanını güvenli biçimde azaltma
Bu işlemi yoğun saat dışında yapın ve önce
free -h çıktısındaki available RAM’in, kullanılan swap miktarını karşılayabilecek düzeyde olduğundan emin olun. Yeterli RAM yoksa işlemi zorlamayın; önce bellek tüketen servisi durdurun, yükü azaltın veya RAM kapasitesini artırın.- Kullanılan swap alanının yolunu öğrenin:
swapon --show. - RAM ve swap durumunu kaydedin:
free -h. - Yeterli RAM varsa ilgili alanı kapatın. Tüm swap alanları için
swapoff -a, belirli bir dosya veya bölüm içinswapoff /swapfilekullanılır. - İşlem tamamlanınca
free -hveswapon --showile kontrol edin. Swap kullanımı sıfıra yaklaşmalı ve RAM kullanımı artmalıdır. - Swap’ı yeniden etkinleştirin:
swapon -aveya ilgili alan içinswapon /swapfile. - Son durumu tekrar
free -hvevmstat 1 5ile izleyin.
swapoff komutu “Cannot allocate memory” benzeri bir hatayla başarısız olursa RAM, swap’taki sayfaların tamamını karşılamıyor demektir. Bu durumda swap’ı tekrar tekrar kapatmayı denemeyin; önce büyük bellek kullanan süreci belirleyip yükü azaltın. İşlem sırasında servis kesintisi veya süreç sonlandırılması olduysa sistem günlüklerinde ilgili servis ve bellek kayıtlarını inceleyin.Swappiness değerini ne zaman düşürmeli?
vm.swappiness, çekirdeğin swap kullanma eğilimini etkiler; swap’ta bulunan mevcut sayfaları kendiliğinden RAM’e taşımaz. Mevcut değeri görmek için:
Bash:
sysctl vm.swappiness
Geçici bir ayar için, örneğin varsayımsal olarak 10 değeri şöyle uygulanabilir:
Bash:
sudo sysctl -w vm.swappiness=10
Bu değişiklik yalnızca swap’a daha erken başvurmayı azaltabilir. Aktif bellek ihtiyacı RAM’i aşıyorsa düşük bir değer sorunu çözmez; sistem yine swap kullanabilir veya bellek yetersizliği yaşayabilir. Kalıcı ayar yapılacaksa dağıtımınızın sysctl yapılandırmasına eklenen değerin yeniden başlatma sonrasında da doğrulanması gerekir. Değeri düşürmeden önce
si/so hareketini ve servislerin bellek ihtiyacını ölçün; yalnızca swap kullanım yüzdesine bakarak karar vermeyin.Swap kullanımı RAM boşken artmış,
si/so düşük ve servis performansı normalse bu durum tek başına arıza değildir. Buna karşılık si/so sürekli yüksek, disk beklemesi artmış veya servisler yavaşlamışsa önce bellek tüketimini azaltın ya da RAM’i artırın; swap’ı temizlemek bu temel nedeni ortadan kaldırmaz.