Sunucum neden yavaşladı? CPU, RAM, disk ve ağ darboğazını ayırt etme
"Sunucu yavaşladı" bir belirti, teşhis değil. Dört farklı kaynak aynı belirtiyi üretir ve dördünün çözümü birbirinden tamamen farklıdır. Yükseltme yapmadan önce hangisinin sizi sınırladığını ölçmek gerekir; aşağıdaki sıra bunu beş dakikada yapar.
Önce tek soru: yavaşlık nerede görünüyor?
Her şey mi yavaş, yoksa tek bir uygulama mı? Sunucudaki her işlem — dosya listelemek, komut çalıştırmak, oturum açmak — yavaşsa sistem kaynaklarından biri tükenmiştir. Yalnızca tek bir uygulama yavaşsa sunucu darboğazı olmayabilir; sorun bir sorguda, bir üçüncü taraf servisinde veya uygulamanın kendisinde olabilir.
1. Yük ortalaması: bakın ama doğru okuyun
uptime
nprocuptime çıktısındaki üç sayı, sırasıyla 1, 5 ve 15 dakikalık yük ortalamasıdır. Kritik ayrıntı şu: Linux'ta yük ortalaması yalnızca CPU bekleyen süreçleri değil, disk bekleyen süreçleri de sayar. Bu yüzden yüksek bir yük, CPU'nun dolu olduğunu kanıtlamaz.
Sayıyı nproc ile karşılaştırın. 4 çekirdekli bir makinede 4 civarı yük doluluk, 15 ise ciddi bir kuyruk demektir. Üç sayıyı birlikte okumak yönü de verir: 1 dakikalık değer 15 dakikalıktan büyükse yük artıyor, küçükse geçmiş bir tepe noktasının kuyruğundasınız.
2. CPU mu bekliyor, disk mi?
topAyrımı %Cpu(s) satırı yapar. us kullanıcı süreçlerini, sy çekirdeği, wa disk bekleme oranını, id boştaki payı, st ise hipervizörün size vermediği zamanı gösterir.
- `us` yüksek: darboğaz gerçekten CPU'da.
- `wa` yüksek: CPU boş, disk yetişemiyor. 4. adıma geçin.
- `st` yüksek: fiziksel makine size söz verilen CPU zamanını vermiyor. Bu sunucu içinde çözülemez, destek talebi konusudur.
top açıkken 1 tuşuna basarsanız çekirdekler tek tek listelenir. Tek çekirdek sürekli doluyken diğerleri boştaysa yükünüz tek iş parçacıklıdır ve çekirdek eklemek hiçbir şey değiştirmez; bu ayrımın tamamı kaç vCPU ve kaç GB RAM gerekir yazısında.
3. Bellek gerçekten bitti mi?
free -mfree sütununa değil `available` sütununa bakın. Linux boş belleği disk önbelleği olarak kullanır, yani düşük "free" değeri normaldir. Darboğaz göstergesi, tepe saatte available değerinin birkaç yüz MB'a inmesidir.
Bellek bittiğinde iki şey olur ve ikisinin de izi kalır. Makine takas alanına sayfalama yapmaya başlar — bu, çökmeyi yavaşlamaya çevirir ama çözüm değildir. Ya da çekirdek en çok bellek kullanan süreci öldürür:
dmesg -T | grep -i "out of memory"Bu komut çıktı veriyorsa uygulamanız sessizce sonlandırılmış demektir; "sunucu kendi kendine durdu" şikâyetinin en sık sebebi budur.
4. Disk: dolu mu, yavaş mı?
Bunlar iki ayrı sorundur ve karıştırılır.
df -h
df -iKullanım oranı %100'e dayanmışsa sorun kapasitedir; neyin yediğini bulmak ve güvenle temizlemek ayrı bir iştir: disk doldu. df -i çıktısındaki inode oranı da dolabilir — o zaman boş yer görünür ama yeni dosya oluşturulamaz.
Kapasite rahatsa gecikmeye bakın:
iostat -x 1 5Bu komut sysstat paketiyle gelir. Belirleyici iki sütun %util ve await. await değeri sürekli onlarca milisaniyeye çıkıyorsa darboğaz disktedir. NVMe'de beklenen değerlerin neden bir kademe farklı olduğu: NVMe SSD nedir
5. Ağ mı, sunucu mu?
Yavaşlık uzaktan hissediliyor ama sunucu içindeki her ölçüm temizse sorun sunucuda değil yoldadır. Oyun sunucusunda bunun karşılığı yükselen ping'tir ve ayrı bir teşhis sırası ister: ping neden yükseldi. Gelen trafikte ani ve açıklanamayan bir sıçrama varsa önce şunu eleyin: DDoS saldırısı altında mıyım
6. Dördü de temizse sorun uygulamadadır
Donanım boş görünürken yaşanan yavaşlığın kaynağı neredeyse her zaman indekslenmemiş bir sorgu, bir kilit veya bir dış servis beklemesidir. Yavaş sorgu logunu açmak çoğu vakayı tek başına çözer: MySQL performans ayarları
Ölçüm gerçekten donanım sınırını gösteriyorsa yükseltme doğru karardır. Hangi kaynağı ne kadar artıracağınızı sunucu yapılandırıcıda seçip aylık tutarı anında görebilir, sanal sunucunun tavanına dayandıysanız hangi noktadan sonra fiziksel sunucunun daha uygun olduğunu, güncel fiyatlarla görebilirsiniz. Ölçmeden yapılan yükseltme ise çoğu zaman doğru parayı yanlış yere harcamaktır.
Ne zaman destek talebi açmalı
Üç durumda sunucu içinde arayacak bir şey kalmaz:
st(steal) değeri sürekli yüksekse — bu, sizin tarafınızda çözülebilecek bir şey değildir.iostatyüksekawaitgösteriyor ama sizin süreçleriniz kayda değer I/O üretmiyorsa.- Beş ölçümün hiçbiri darboğaz göstermiyor ama yavaşlık nesnel olarak ölçülebiliyorsa.
Talebe top ile iostat -x çıktılarını, yavaşlığın başladığı saati ve hangi işlemin yavaşladığını yazın. Sanal sunucu paketlerinde kaynak grafikleri panelde tutulduğu için geçmişe dönük karşılaştırma da yapılabilir; "ne zaman başladı" sorusunun cevabı teşhisi genelde yarıya indirir.