Bir sunucunun performans sorununu belirleme, bu sorunu hızlıca çözme, sunucu performansını iyileştirme ve regresyonları önleme.
Genel bakış
Bu kılavuz, aşırı yüklenmiş bir sunucuyu 4 adımda nasıl düzelteceğinizi gösterir:
- Değerlendir: Sunucunun performans sorununu belirleyin.
- Sabitleştirme: Etkiyi azaltmak için hızlı düzeltmeleri uygulayın.
- İyileştirme: Sunucu özelliklerini artırın ve optimize edin.
- İzleme: Gelecekte meydana gelebilecek sorunları önlemek için otomatik araçlar kullanabilirsiniz.
Değerlendirme
Trafik bir sunucuda aşırı yüklendiğinde, şunlardan biri veya daha fazlası performans sorunu yaratabilir: CPU, ağ, bellek veya disk G/Ç'si. Bunlardan hangisinin darboğaz olduğunu saptamak, çabalarınızı en etkili çözümlere odaklamanızı sağlar.
- CPU: Sürekli olarak% 80'in üzerinde olan CPU kullanımı araştırılmalı ve düzeltilmelidir. CPU kullanımı ~%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ği sunarken CPU kullanımı ihmal edilebilir düzeydedir ancak bunu trafikteki artışlar sırasında karşılaşılan ölçekte yapmak bazen sunucuyu yorabilir. Sunumu diğer altyapıya boşaltmak, pahalı işlemleri azaltmak ve istek miktarını sınırlamak CPU kullanımını azaltır.
- Ağ: Trafiğin yüksek olduğu dönemlerde, kullanıcı isteklerini karşılamak için gereken ağ işleme hızı kapasiteyi aşabilir. Barındırma sağlayıcısına bağlı olarak bazı siteler de kümülatif veri aktarımıyla ilgili sınırlara ulaşabilir. Sunucuya ve sunucudan aktarılan verilerin boyutunu ve miktarını azaltmak bu performans sorununu ortadan kaldırır.
- Bellek: Bir sistemde yeterli bellek olmadığında verilerin depolama amacıyla diske yüklenmesi gerekir. Diske erişim, belleğe göre çok daha yavaştır ve bu durum tüm uygulamayı yavaşlatabilir. Bellek tamamen tükendiyse Bellek Yetersiz (OOM) hatalarına neden olabilir. Bellek tahsisinin ayarlanması, bellek sızıntılarının düzeltilmesi ve belleğin yükseltilmesi bu performans sorununu giderebilir.
- Disk G/Ç: Verilerin diskten okunabileceği veya diskten yazılabileceği hız diskin kendisi tarafından kısıtlanır. Disk G/Ç sorunu bir performans sorunuysa bellekte önbelleğe alınan veri miktarının artırılması bu sorunu hafifletebilir (artık bellek kullanımı pahasına). Bu işe yaramazsa disklerinizi yükseltmeniz gerekebilir.
Bu kılavuzdaki teknikler, CPU ve ağdaki performans sorunlarını gidermeye odaklanır. Çoğu site için trafikteki ani artış sırasında CPU ve ağ en alakalı darboğazları oluşturur.
top
'i etkilenen sunucuda çalıştırmak, performans sorunlarını araştırmak için iyi bir başlangıç noktasıdır. Varsa barındırma sağlayıcınızdan veya izleme araçlarınızdan alınan geçmiş verileriyle ekleyin.
Sabitle
Aşırı yüklenmiş bir sunucu, sistemin başka bir yerinde kısa sürede geçişli hatalara neden olabilir. Bu nedenle, daha önemli değişiklikler yapmadan önce sunucunun dengesini sağlamanız önemlidir.
Hız Sınırlaması
Hız sınırlama, gelen istek sayısını sınırlandırarak altyapıyı korur. Sunucu performansının düşmesiyle bu konunun önemi giderek artıyor: Yanıt süreleri arttıkça kullanıcılar sayfayı agresif bir şekilde yenileme eğilimi gösteriyorlar. Bu da sunucu yükünü daha da artırıyor.
Düzelt
Bir isteğin reddedilmesi nispeten ucuz olsa da sunucunuzu korumanın en iyi yolu, hız sınırlandırmasını kendisinden yukarı akış bir yerde (ör. yük dengeleyici, ters proxy veya CDN aracılığıyla) yönetmektir.
Talimatlar:
Daha fazla bilgi:
HTTP Önbelleğe Alma
İçeriği daha etkin bir şekilde önbelleğe almanın yollarını arayın. Bir kaynak HTTP önbelleğinden (tarayıcı önbelleği veya CDN) sunulabiliyorsa kaynak sunucudan istenmesine gerek yoktur, bu da sunucu yükünü azaltır.
Cache-Control
, Expires
ve ETag
gibi HTTP üst bilgileri, bir kaynağın HTTP önbelleği tarafından nasıl önbelleğe alınması gerektiğini gösterir. Bu üstbilgilerin denetlenmesi ve düzeltilmesi önbelleğe almayı iyileştirir.
Service Worker önbelleğe alma için de kullanılabilir. Ancak bunlar, ayrı bir önbellek kullanır ve uygun HTTP önbelleğe alma işlemi için yedek değil, ek işlevdir. Bu nedenle, aşırı yüklenmiş bir sunucuyu işlerken HTTP önbelleğe almanın optimize edilmesine odaklanılmalıdır.
Teşhis
Lighthouse'u çalıştırın ve kısa ila orta süreli geçerlilik (TTL) değerine sahip kaynakların listesini görüntülemek için Statik öğeleri etkili bir önbellek politikası ile sunma denetimine bakın. Listelenen her kaynak için TTL'nin artırılmasının gerekip gerekmediğini düşünün. Kaba bir yönerge olarak:
- Statik kaynaklar uzun bir 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ü Düşüş
Kontrollü azalma, bir sistemdeki fazla yükü atmak için işlevselliği 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 bazı pahalı veya gerekli olmayan özellikleri devre dışı bırakma. İş üzerinde minimum düzeyde etki yaratarak güvenli ve kolay bir şekilde kaldırılabilecek işlevlerin kaldırılması vurgulanmalıdır.
İyileştirme
İçerik yayınlama ağı (CDN) kullanın
Statik öğelerin yayınlanması, sunucunuzdan içerik yayınlama ağına (CDN) aktarılabilir ve böylece yükü azaltır.
CDN'nin birincil işlevi, kullanıcılara yakın yerlerde bulunan büyük bir sunucu ağı sağlayarak içeriği kullanıcılara hızlı bir şekilde yayınlamaktı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 faydalanır. Bu nedenle, kendi CDN'nizi çalıştırmak nadiren mantıklıdır. Temel CDN yapılandırması oldukça hızlı bir şekilde oluşturulur (yaklaşık 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ı tanımlayın. Sonuçlar sayfasında, CDN'den sunulması gereken kaynakların listesini görmek için "CDN'nin etkili kullanımı"nın üstündeki kareyi tıklayın.
!["CDN'nin etkili kullanımı" düğmesini gösteren ok](https://web.developers.google.cn/static/articles/overloaded-server/image/arrow-pointing-the-effe-b5f163f623b97.jpg?authuser=9&hl=tr)
Düzelt
Bir kaynak CDN tarafından önbelleğe alınmıyorsa aşağıdaki koşulların karşılanıp karşılanmadığını kontrol edin:
Cache-Control: public
başlığı vardır.Cache-Control: s-maxage
,Cache-Control: max-age
veyaExpires
başlığı var.Content-Length
,Content-Range
veyaTransfer-Encoding header
simgesi var.
İşlem kaynaklarını ölçeklendirin
İşlem kaynaklarını ölçeklendirme kararı dikkatli bir şekilde verilmelidir. Genellikle işlem kaynaklarının ölçeklendirilmesi gerekse de bu işlemi erkenden yapmak gereksiz mimari karmaşıklık ve finansal maliyetler oluşturabilir.
Teşhis
İlk Bayt Süresinin (TTFB) yüksek olması, bir sunucunun kapasitesine yaklaşma olduğunu gösterebilir. Bu bilgileri Lighthouse Sunucu yanıt sürelerini azaltma (TTFB) denetiminde bulabilirsiniz.
Daha ayrıntılı araştırma yapmak için CPU kullanımını değerlendirmek amacıyla bir izleme aracı kullanın. Mevcut veya öngörülen CPU kullanımı% 80'i aşarsa sunucularınızı artırmayı düşünmelisiniz.
Düzelt
Yük dengeleyici eklenmesi, trafiğin birden çok sunucuya dağıtılmasını mümkün kılar. Bir yük dengeleyici sunucu havuzunun önünde bulunur ve trafiği uygun sunucuya yönlendirir. Bulut sağlayıcıları kendi yük dengeleyicilerini (GCP, AWS, Azure) sunmaktadır. Dilerseniz HAProxy ya da NGINX kullanarak kendi yük dengeleyicilerinizi de oluşturabilirsiniz. Yük dengeleyici yerleştirildikten sonra ek sunucular eklenebilir.
Çoğu bulut sağlayıcısı, yük dengelemenin yanı sıra otomatik ölçeklendirme (GCP, AWS, Azure) sunar. Otomatik ölçeklendirme, yük dengeleme ile birlikte çalışır. Otomatik ölçeklendirme, işlem kaynaklarını belirli bir zamanda talebe göre otomatik olarak yukarı veya aşağı ölçeklendirir. Bununla birlikte, otomatik ölçeklendirme sihirli bir işlem değildir. Yeni örneklerin çevrimiçi olması zaman alır ve önemli ölçüde yapılandırma gerektirir. Otomatik ölçeklendirmenin gerektirdiği ek karmaşıklık nedeniyle ilk olarak daha basit bir yük dengeleyici tabanlı kurulum düşünülmelidir.
Sıkıştırmayı etkinleştirin
Metin tabanlı kaynaklar gzip veya brotli kullanılarak sıkıştırılmalıdır. Gzip, bu kaynakların aktarım boyutunu yaklaşık %70 azaltabilir.
Teşhis
Sıkıştırılması gereken kaynakları tanımlamak için Lighthouse Metin sıkıştırmayı etkinleştir denetimini kullanın.
Düzelt
Sunucu yapılandırmanızı güncelleyerek sıkıştırmayı etkinleştirin. Talimatlar:
Resimleri ve medyayı optimize edin
Resimler çoğu web sitesinin dosya boyutunun çoğunu oluşturur; resimleri optimize etmek bir sitenin boyutunu hızlı ve önemli ölçüde küçültebilir.
Teşhis
Lighthouse, olası resim optimizasyonlarını işaret eden çeşitli denetimlere sahiptir. Alternatif olarak, en büyük resim dosyalarını belirlemek için Geliştirici Araçları'nı da kullanabilirsiniz. Bu resimler, muhtemelen optimizasyon için iyi adaylardır.
İlgili Lighthouse denetimleri:
- Resimleri uygun şekilde boyutlandırın
- Ekran dışındaki resimleri erteleme
- Resimleri verimli bir şekilde kodlama
- Resimleri yeni nesil biçimlerde yayınlayın
- Animasyonlu içerikler için video biçimlerini kullanma
Chrome Geliştirici Araçları iş akışı:
- Ağ etkinliğini günlüğe kaydetme
- Görsel olmayan kaynakları filtrelemek için Resim'i tıklayın
- Resim dosyalarını boyuta göre sıralamak için Boyut sütununu tıklayın.
Düzelt
Zamanınız sınırlıysa...
Zamanınızı büyük ve sık yüklenen resimleri belirlemeye ve Squoosh gibi bir araçla bunları manuel olarak optimize etmeye odaklayın. Lokomotif resimler genellikle optimizasyon için iyi birer adaydır.
Göz önünde bulundurulması gereken noktalar:
- Boyut: Resimler gerekenden daha büyük olmamalıdır.
- Sıkıştırma: Genel olarak, 80-85 kalite düzeyinin resim kalitesi üzerinde minimum etkisi olurken, dosya boyutunda% 30-40 oranında bir küçülme meydana gelir.
- Biçim: Fotoğraflar için PNG yerine JPEG, animasyonlu içerik için GIF yerine MP4 kullanın.
Daha fazla zamanınız varsa...
Resimler, sitenizin önemli bir kısmını oluşturuyorsa bir resim CDN'si oluşturmayı düşünün. Resim CDN'leri, resimleri sunmak ve optimize etmek için tasarlanmıştır ve kaynak sunucudan resim sunumunu boşaltır. Görüntü CDN'si kolayca ayarlanabilir ancak mevcut resim URL'lerinin, resim CDN'sine işaret edecek şekilde güncellenmesi gerekir.
Daha fazla bilgi:
JS ve CSS'yi küçültün
Küçültme işlemi, JavaScript ve CSS'deki gereksiz karakterleri kaldırır.
Teşhis
Küçültülmesi gereken kaynakları belirlemek için CSS'yi Küçült ve JavaScript'i Küçült Lighthouse denetimlerini kullanın.
Düzelt
Zamanınız sınırlıysa JavaScript'inizi küçültmeye odaklanın. Çoğu sitede CSS'den daha fazla JavaScript kullanıldığından bu, daha etkili olacaktır.
İzleme
Sunucu izleme araçları; veri toplama, kontrol panelleri ve sunucu performansıyla ilgili uyarılar sağlar. Bunların kullanımı, gelecekteki sunucu performansı sorunlarını önlemeye ve azaltmaya yardımcı olabilir.
İzleme kurulumu mümkün olduğunca basit olmalıdır. Aşırı miktarda veri toplama ve uyarı oluşturmanın bir maliyeti vardır: Veri toplama kapsamı veya sıklığı ne kadar büyükse toplama ve depolama da o kadar pahalı olur ve aşırı uyarı verilmesi kaçınılmaz olarak sayfaların yok sayılmasına yol açar.
Uyarıları tutarlı ve doğru bir şekilde algılayan metrikler kullanılmalıdır. Sunucu yanıt süresi (gecikme) bu durum için özellikle iyi sonuç veren bir metriktir: Çok çeşitli sorunları yakalar ve doğrudan kullanıcı deneyimiyle ilişkilidir. CPU kullanımı gibi alt düzey metriklere dayalı uyarılar faydalı bir tamamlayıcı olabilir ancak sorunların daha küçük bir alt kümesini yakalar. Ayrıca uyarılar, ortalamalar yerine kuyrukta gözlemlenen performansa (diğer bir deyişle 95. veya 99. yüzdelik dilimler) dayanmalıdır. Aksi takdirde, ortalamalar tüm kullanıcıları etkilemeyen sorunları kolayca ayırt edemeyebilir.
Düzelt
Tüm büyük bulut sağlayıcıları kendi izleme araçlarını (GCP, AWS, Azure) sunar. Buna ek olarak, Netdata mükemmel bir ücretsiz ve açık kaynak alternatifidir. Hangi aracı seçerseniz seçin, izlemek istediğiniz her sunucuya aracın izleme aracısını yüklemeniz gerekir. İşlem tamamlandıktan sonra uyarıları ayarladığınızdan emin olun.
Talimatlar: