Sunucu yavaşladığında ilk refleks genellikle "paketi büyütelim" olur. Oysa dar boğazın hangi katmanda olduğunu bilmeden kaynak eklemek, çoğu zaman parayı harcayıp sorunu çözmemek demektir.
Aşağıdaki sıra, dört katmanı birkaç dakikada eler.
1. Genel duruma bakın
bashuptimeÇıktının sonundaki üç sayı yük ortalamasıdır (son 1, 5 ve 15 dakika). Bu değerleri çekirdek sayınızla karşılaştırın:
bashnproc4 çekirdekli bir sunucuda yük ortalaması 4'ün altındaysa işlemci dar boğaz değildir. Sürekli 8-10 gibi değerler görüyorsanız işlemci ya da disk beklemesi var demektir.
Üç sayının yönü de bilgi verir: 1 dakikalık değer 15 dakikalıktan büyükse yük artıyor, küçükse geçmiş bir tepe noktasından çıkıyorsunuz.
2. İşlemci mi, disk beklemesi mi?
bashtop -bn1 | head -5İlk satırlardaki %Cpu(s) bölümünde şunlara bakın:
- us (user) yüksek → uygulamalarınız işlemciyi tüketiyor
- sy (system) yüksek → çekirdek düzeyinde bir sorun, genellikle aşırı sistem çağrısı
- wa (iowait) yüksek → işlemci boşta bekliyor, disk yetişemiyor
- st (steal) yüksek → sanallaştırma katmanında komşu yük var; garantili kaynaklı bir pakette bu değerin sıfıra yakın olması beklenir
wa değeri %10'un üzerindeyse sorun işlemcide değil diskte aramalısınız.
3. Bellek gerçekten dolu mu?
bashfree -hused sütunu yanıltıcıdır — Linux boş belleği dosya önbelleği olarak kullanır ve ihtiyaç olduğunda anında bırakır. Bakılacak sütun available'dır.
Asıl uyarı işareti takas alanıdır:
bashvmstat 1 5si ve so sütunları sürekli sıfırdan büyükse sunucu takas alanına yazıp okuyor demektir. Bu, yavaşlığın en sert sebeplerinden biridir ve bellek eklemek dışında kalıcı çözümü yoktur.
4. Diski kim meşgul ediyor?
bashapt install -y sysstat # gerekiyorsa
iostat -x 1 3%util sütunu %90'a yaklaşıyorsa disk doyuma ulaşmıştır. await sütunu ise isteklerin ortalama bekleme süresidir; NVMe bir diskte bu değerin milisaniyenin altında olması beklenir.
Bir de basit ama sık atlanan kontrol:
bashdf -h
df -iDolu disk, hizmetin sessizce durmasının en yaygın sebebidir. İkinci komut inode doluluğunu gösterir — küçük dosyaların çok olduğu sunucularda disk boş görünürken inode'lar tükenmiş olabilir.
5. Hangi süreç sorumlu?
bash# bellege gore ilk 10 surec
ps aux --sort=-%mem | head -11
# islemciye gore ilk 10 surec
ps aux --sort=-%cpu | head -11Web sunucusu ya da PHP süreçleri listenin başındaysa sorun uygulama katmanındadır. Veritabanı başı çekiyorsa yavaş sorgu aramaya geçin:
bashmysqladmin -u root -p processlistUzun süredir çalışan bir sorgu görüyorsanız dar boğazı buldunuz demektir.
6. Ağ tarafı
bashss -s
ss -ant | awk '{print $1}' | sort | uniq -cTIME-WAIT durumundaki bağlantıların çok olması normaldir. Ama SYN-RECV sayısı olağandışı yüksekse bir SYN flood ile karşı karşıya olabilirsiniz — bu durumda DDoS koruma rehberimize bakın.
7. Günlükleri okuyun
bashjournalctl -p err -n 50 --no-pager
dmesg -T | tail -30dmesg çıktısında OOM killer kayıtları görüyorsanız çekirdek, bellek yetmediği için süreçleri öldürüyor demektir. Bu, "sunucu ara ara duruyor" şikâyetinin en yaygın açıklamasıdır.
Teşhisten sonra
Dar boğazı bulduğunuzda çözüm genellikle kaynak eklemek değildir:
- İşlemci → önbellekleme, yavaş sorguların düzeltilmesi, gereksiz eklentilerin kaldırılması
- Bellek → bellek sızıntısı olan sürecin bulunması, PHP-FPM işçi sayısının ayarlanması
- Disk → veritabanı indeksleri, günlük dosyalarının döndürülmesi, NVMe'ye geçiş
- Ağ → önbellek, CDN, hız sınırlama
Ölçmeden büyütmeyin. Ölçüm elinizdeyse kaynak planlamasını birlikte yapabiliriz.
