Sunucum yavaşladı: RAM, CPU ve disk nasıl kontrol edilir?
Sunucunuz yavaşladıysa üç şeye bakın: RAM, işlemci ve disk. Bağlanıp üç komut çalıştırmak yeter: bellek için free -h, işlemci için top, disk için df -h. Hangisi doluysa darboğaz odur. Üçü de rahatsa sorun genellikle uygulamanın kendisindedir.
Önce yüke bakın
Yük ortalaması, işlemciyi ya da diski bekleyen işlemlerin ortalama sayısıdır. Aşağıdaki çıktının ilk üç sayısı son 1, 5 ve 15 dakikanın ortalamasıdır. Bunları çekirdek sayısıyla karşılaştırın:
cat /proc/loadavg
nproc
Yük uzun süre çekirdek sayısının üstünde kalıyorsa sunucu işe yetişemiyordur.
RAM: free -h
free -h
En önemli sütun available (kullanılabilir) sütunudur. Çok küçükse ve Swap satırı doluyorsa RAM yetmiyor demektir. Bellek biterse çekirdek, en çok bellek kullanan işlemlerden birini sonlandırır (OOM killer). Veritabanının ya da web uygulamasının kendiliğinden kapanması çoğunlukla bunun işaretidir. Şöyle kontrol edin:
sudo dmesg -T | grep -i -E "out of memory|killed process"
İşlemci: top
top
Açılan ekranda P tuşu işlemleri işlemci kullanımına, M tuşu bellek kullanımına göre sıralar. q ile çıkarsınız. Üstteki işlemci satırında şunlara bakın:
- us: kullanıcı işlemlerinin payı. Yüksekse bir uygulama işlemciyi yiyor.
- wa: disk girdi/çıktısını bekleme süresi. Yüksekse sorun işlemci değil, disktir.
- st: sanal sunucudan "çalınan" süre, yani sanallaştırma katmanının işlemciyi başka bir işe verdiği zaman. Sürekli yüksekse sorun sunucunuzun içinde olmayabilir. Bu durumda destek ekibine yazın.
Disk: df -h
df -h
df -i
İlk komut dolu alanı, ikincisi dosya sayısı sınırını (inode) gösterir. Disk tamamen dolarsa veritabanları ve uygulamalar yazamaz, sunucu yavaşlar ya da hata verir. Neyin yer kapladığını bulun:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Sistem günlükleri büyüdüyse sudo journalctl --vacuum-size=200M ile küçültebilirsiniz. Docker kullanıyorsanız docker system df imajların ve konteynerlerin kapladığı yeri, docker stats --no-stream hangi konteynerin ne kadar işlemci ve bellek yediğini gösterir.
Belirti, olası neden ve çözüm
| Belirti | Olası neden | Ne yapmalı? |
|---|---|---|
| Sayfalar ara sıra çok yavaş, available düşük, swap dolu | RAM yetersiz | Gereksiz servisleri kapatın, uygulamanın bellek ayarlarını (örneğin PHP-FPM işçi sayısı, veritabanı belleği) kısın. Yetmezse sunucuyu büyütün. |
Servis kendiliğinden kapanıyor, dmesg çıktısında "killed process" | Bellek bitti, OOM killer devreye girdi | RAM ekleyin ya da bellek tüketimini azaltın. |
top'ta tek bir işlem bir çekirdeği tamamen dolduruyor | Takılmış işlem, hatalı eklenti ya da döngü | İşlemi bulun, ilgili uygulamayı ya da eklentiyi düzeltin veya kapatın. |
| Yük yüksek, işlemci boşta, wa yüksek | Disk bekleniyor (yoğun yazma ya da swap) | vmstat 1 5 çıktısında si ve so sütunlarına bakın. Swap kullanılıyorsa RAM ekleyin. |
df -h ya da df -i dolu | Disk veya inode bitti | Büyük dosyaları ve günlükleri temizleyin. Sürekli doluyorsa büyütün. |
| st sürekli yüksek | Sorun sunucunun dışında olabilir | Destek ekibine yazın. |
Seturack'ta her sunucunun disk hızı sınırlıdır: sürekli okumada 500 MB/sn ve 20.000 IOPS, sürekli yazmada 200 MB/sn ve 8.000 IOPS. iostat -x 1 5 çıktısında değerleriniz bu sayılara dayanıyorsa yavaşlamanın nedeni disk yoğunluğudur. İşi önbellekle azaltın ya da zamana yayın. iostat yoksa sudo apt install -y sysstat ile kurun.
Swap ne zaman yardım eder?
Swap, diskin RAM yerine kullanılmasıdır. Kısa süreli bellek sıçramalarında sunucunun OOM'dan kurtulmasını sağlar ama RAM kadar hızlı değildir. vmstat 1 5 çıktısında si ve so sürekli sıfırdan büyükse sunucu sürekli takasa yazıyor demektir. Çözüm swap değil RAM'dir. Swap yoksa (swapon --show boş dönüyorsa) ve sıçramaları yumuşatmak istiyorsanız 2 GB'lık bir takas dosyası ekleyebilirsiniz. Komutlar ext4 dosya sistemi içindir:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Kaynaklar rahatsa
RAM, işlemci ve disk rahat görünüyorsa top'ta en üstteki işlemin adına bakın:
php-fpm,apache2ya danginxönde ise sorun çoğunlukla sitenin kendisindedir: ağır bir eklenti, önbelleğin olmaması ya da ani bir ziyaretçi artışı.mysqldya damariadbdönde ise yavaş sorgular vardır. Veritabanının yavaş sorgu günlüğünü açıp hangi sorguların uzun sürdüğüne bakın.- Tanımadığınız bir işlem sürekli işlemciyi yiyorsa sunucu ele geçirilmiş olabilir. Parolaları değiştirin, açık oturumlara ve
sudo ss -tulpnçıktısına bakın, gerekirse sunucuyu temiz bir sistemle yeniden kurun.
Ne zaman büyütmeli?
Sıra şudur: önce ayarlayın, önbellekleyin, gereksiz işi kapatın. Yük bunlardan sonra da yüksekse sunucuyu büyütün. Panelde sunucunuzun Boyut sekmesini açın, kaydırıcıları yeni boyuta getirip onaylayın. Ödemeden sonra sunucu kendiliğinden bir kez yeniden başlar ve yeni boyutta açılır. IP adresiniz ve verileriniz aynı kalır, yalnız kalan günlerin farkını ödersiniz. RAM, vCore ve diski ayrı ayrı büyütebilirsiniz, yalnız yetmeyeni artırırsınız. Büyütmede disk de büyür, küçültmede ise disk küçülmez. Ayrıntılar için büyütme ve küçültme yazısına bakın.
Yük yüzünden sunucu hiç yanıt vermiyorsa SSH bağlanamayabilir. O zaman panelden VNC Konsol'u açın ya da sunucuyu panelden yeniden başlatın.
Yorumlar0
Henüz Yorum Yok
İlk düşüncenizi paylaşan siz olun.
Yorum bırakmak için lütfen giriş yapın veya kaydolun.