Bir sunucunun performans sorununu belirleme, bu sorunu hızlıca çözme, sunucu performansını iyileştirme ve regresyonları önleme.
Genel Bakış
Bu kılavuzda, aşırı yüklenmiş bir sunucunun nasıl düzeltileceği 4 adımda gösterilmektedir:
- Değerlendirme: Sunucunun performans sorununu belirleyin.
- Düzeltme: Etkiyi azaltmak için hızlı düzeltmeler uygulayın.
- İyileştirme: Sunucu özelliklerini artırın ve optimize edin.
- İzleme: Gelecekte yaşanabilecek sorunları önlemek için otomatik araçları kullanın.
Değerlendirme
Trafik bir sunucunun yükünü artırdığında aşağıdakilerden biri veya daha fazlası darboğaz haline gelebilir: CPU, ağ, bellek veya disk G/Ç. Bunlardan hangisinin darboğaz olduğunu belirlemek, çabaları en etkili azaltma yöntemlerine odaklamayı mümkün kılar.
- CPU: Sürekli olarak% 80'in üzerinde olan CPU kullanımı araştırılmalı ve düzeltilmelidir. CPU kullanımı yaklaşık %80-90'a ulaştığında sunucu performansı genellikle düşer ve kullanım %100'e yaklaştıkça daha belirgin hale gelir. Tek bir isteğin sunulması, CPU kullanımını çok az etkiler ancak bunu trafik artışları sırasında karşılaşılan ölçekte yapmak bazen bir sunucuyu aşırı yükleyebilir. Yayınlamayı diğer altyapıya aktarmak, pahalı işlemleri azaltmak ve istek miktarını sınırlamak CPU kullanımını azaltır.
- Ağ: Yüksek trafik dönemlerinde, kullanıcı isteklerini karşılamak için gereken ağ verimi kapasiteyi aşabilir. Barındırma sağlayıcıya bağlı olarak bazı siteler, kümülatif veri aktarımıyla ilgili sınırlara da ulaşabilir. Sunucu ile arasında aktarılan verilerin boyutunu ve miktarını azaltmak bu darboğazı ortadan kaldırır.
- Bellek: Bir sistemde yeterli bellek olmadığında verilerin depolanması için diske aktarılması gerekir. Diske erişmek belleğe kıyasla çok daha yavaştır ve bu durum uygulamanın tamamını yavaşlatabilir. Bellek tamamen tükenirse Yetersiz Bellek (OOM) hataları oluşabilir. Bellek tahsisini ayarlayarak, bellek sızıntılarını düzelterek ve belleği yükselterek bu darboğazdan kurtulabilirsiniz.
- Disk G/Ç: Verilerin diskten okunma veya yazılma hızı, diskin kendisi tarafından sınırlanır. Disk I/O'su darboğaz oluşturuyorsa bellekte önbelleğe alınan veri miktarını artırmak bu sorunu hafifletebilir (bellek kullanımının artması pahasına). Bu yöntem işe yaramazsa disklerinizi yükseltmeniz gerekebilir.
Bu kılavuzda yer alan teknikler, CPU ve ağ darboğazlarını gidermeye odaklanır. Çoğu sitede, trafikte ani artış yaşandığında en önemli darboğazlar CPU ve ağdır.
Etkilenen sunucuda top çalıştırmak, darboğazları incelemek için iyi bir başlangıç noktasıdır. Gerekirse bu bilgileri barındırma sağlayıcınızdan veya izleme araçlarınızdan alınan geçmiş verilerle destekleyin.
Sabitle
Aşırı yüklenmiş bir sunucu, sistemdeki başka yerlerde hızlı bir şekilde zincirleme hatalara neden olabilir. Bu nedenle, daha önemli değişiklikler yapmayı denemeden önce sunucunun kararlı hale getirilmesi önemlidir.
Hız Sınırlaması
Hız sınırlaması, gelen isteklerin sayısını sınırlayarak altyapıyı korur. Sunucu performansı düştükçe bu durum giderek daha önemli hale geliyor: Yanıt süreleri arttıkça kullanıcılar sayfayı agresif bir şekilde yenilemeye eğilimli oluyor ve bu da sunucu yükünü daha da artırıyor.
Düzelt
Bir isteği reddetmek nispeten ucuz olsa da sunucunuzu korumanın en iyi yolu, akış sınırlamasını sunucunun upstream tarafında (ör. bir yük dengeleyici, ters proxy veya CDN aracılığıyla) ele almaktır.
Talimatlar:
Daha fazla bilgi:
HTTP Önbelleğe Alma
İçerikleri daha agresif bir şekilde önbelleğe alma yollarını arayın. Bir kaynak HTTP önbelleğinden (tarayıcı önbelleği veya CDN) sunulabiliyorsa kaynak sunucudan istenmesi gerekmez. Bu da sunucu yükünü azaltır.
Cache-Control, Expires ve ETag gibi HTTP üstbilgileri, bir kaynağın HTTP önbelleği tarafından nasıl önbelleğe alınması gerektiğini belirtir. Bu üstbilgileri denetleyip düzeltmek, önbelleğe alma işlemini iyileştirir.
Hizmet çalışanları önbelleğe alma için de kullanılabilir ancak ayrı bir önbelleğe sahiptir ve uygun HTTP önbelleğe almanın yerine ek bir seçenektir. Bu nedenle, aşırı yüklenmiş bir sunucuyla çalışırken çabalar HTTP önbelleğe alma işlemini optimize etmeye odaklanmalıdır.
Teşhis
Lighthouse'u çalıştırın ve kısa ile orta arasında geçerlilik süresi (TTL) olan kaynakların listesini görüntülemek için Statik öğeleri verimli bir önbellek politikasıyla yayınlayın denetimine bakın. Listelenen her kaynak için TTL'nin artırılması gerekip gerekmediğini değerlendirin. Kabaca şu şekilde özetlenebilir:
- Statik kaynaklar uzun TTL (1 yıl) ile önbelleğe alınmalıdır.
- Dinamik kaynaklar kısa bir TTL (3 saat) ile önbelleğe alınmalıdır.
Düzelt
Cache-Control başlığının max-age yönergesini uygun saniye sayısına ayarlayın.
Talimatlar:
Kontrollü Azalma
Sorunsuz azaltma, bir sistemdeki aşırı yükü azaltmak için işlevleri geçici olarak azaltma stratejisidir. Bu kavram birçok farklı şekilde uygulanabilir: Örneğin, tam özellikli bir uygulama yerine statik bir metin sayfası sunma, aramayı devre dışı bırakma veya daha az arama sonucu döndürme ya da belirli pahalı veya gerekli olmayan özellikleri devre dışı bırakma. İşletmeye en az etkiyle güvenli ve kolay bir şekilde kaldırılabilecek işlevlerin kaldırılmasına öncelik verilmelidir.
İyileştirme
İçerik yayınlama ağı (CDN) kullanın
Statik öğelerin sunulması, sunucunuzdan bir içerik yayınlama ağına (CDN) aktarılabilir. Böylece yük azaltılabilir.
CDN'lerin birincil işlevi, kullanıcılara yakın konumlarda bulunan büyük bir sunucu ağı sağlayarak içerikleri kullanıcılara hızlı bir şekilde sunmaktır. Ancak çoğu CDN, sıkıştırma, yük dengeleme ve medya optimizasyonu gibi performansla ilgili ek özellikler de sunar.
CDN oluşturma
CDN'ler ölçekten yararlanır. Bu nedenle, kendi CDN'nizi işletmek nadiren mantıklı olur. Temel bir CDN yapılandırmasının ayarlanması oldukça hızlıdır (~30 dakika) ve DNS kayıtlarının CDN'yi işaret edecek şekilde güncellenmesinden oluşur.
CDN Kullanımını Optimize Etme
Teşhis
WebPageTest'i çalıştırarak CDN'den sunulmayan (ancak sunulması gereken) kaynakları belirleyin. Sonuçlar sayfasında, CDN'den yayınlanması gereken kaynakların listesini görmek için "CDN'nin etkili kullanımı"nın üzerindeki kareyi tıklayın.