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.

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
üstbilgisi var.Cache-Control: s-maxage
,Cache-Control: max-age
veyaExpires
üstbilgisi var.Content-Length
,Content-Range
veyaTransfer-Encoding header
simgesi vardır.
İşlem kaynaklarını ölçeklendirme
Hesaplama kaynaklarını ölçeklendirme kararı dikkatli bir şekilde alınmalıdır. Bilgi işlem kaynaklarını ölçeklendirmek genellikle gerekli olsa da bunu erken yapmak gereksiz mimari karmaşıklığı ve mali maliyetler oluşturabilir.
Teşhis
Yüksek ilk bayta geçiş süresi (TTFB), sunucunun kapasitesine yaklaştığının göstergesi olabilir. Bu bilgileri Lighthouse Sunucu yanıt sürelerini (TTFB) azaltın denetiminde bulabilirsiniz.
Daha ayrıntılı inceleme yapmak için CPU kullanımını değerlendirmek üzere bir izleme aracı kullanın. Mevcut veya beklenen CPU kullanımı% 80'i aşıyorsa sunucularınızı artırmayı düşünmeniz gerekir.
Düzelt
Yük dengeleyici eklemek, trafiği birden fazla sunucuya dağıtmayı mümkün kılar. Yük dengeleyici, bir sunucu havuzunun önünde bulunur ve trafiği uygun sunucuya yönlendirir. Bulut sağlayıcılar kendi yük dengeleyicilerini (GCP, AWS, Azure) sunar veya HAProxy ya da NGINX'i kullanarak kendi yük dengeleyicinizi ayarlayabilirsiniz. Yük dengeleyici kurulduktan sonra ek sunucular eklenebilir.
Çoğu bulut sağlayıcı, yük dengelemeye ek olarak otomatik ölçeklendirme de sunar (GCP, AWS, Azure). Otomatik ölçeklendirme, yük dengelemeyle birlikte çalışır. Otomatik ölçeklendirme, belirli bir zamandaki talep doğrultusunda bilgi işlem kaynaklarını otomatik olarak ölçeklendirir. Bununla birlikte, otomatik ölçeklendirme sihirli bir işlem değildir. Yeni örneklerin kullanıma girmesi zaman alır ve önemli yapılandırmalar gerektirir. Otomatik ölçeklendirmenin ek karmaşıklığı nedeniyle, önce yük dengeleyici tabanlı daha basit bir kurulum düşünülmelidir.
Sıkıştırmayı etkinleştirin
Metne dayalı kaynaklar, gzip veya brotli kullanılarak sıkıştırılmalıdır. Gzip, bu kaynakların aktarım boyutunu yaklaşık %70 oranında azaltabilir.
Teşhis
Sıkıştırılması gereken kaynakları belirlemek için Lighthouse Metin sıkıştırmayı etkinleştirin denetimini kullanın.
Düzelt
Sunucu yapılandırmanızı güncelleyerek sıkıştırmayı etkinleştirin. Talimatlar:
Resimleri ve medyayı optimize etme
Resimler, çoğu web sitesinin dosya boyutunun büyük bir kısmını oluşturur. Resimleri optimize etmek, sitenin boyutunu hızlı ve önemli ölçüde azaltabilir.
Teşhis
Lighthouse, olası resim optimizasyonlarını işaretleyen çeşitli denetimlere sahiptir. Alternatif olarak, en büyük resim dosyalarını belirlemek için DevTools'u kullanabilirsiniz. Bu resimler, optimizasyon için iyi adaylar olabilir.
Alakalı Lighthouse denetimleri:
- Görselleri uygun şekilde boyutlandırın
- Ekran dışındaki görselleri erteleme
- Resimleri verimli bir şekilde kodlama
- Resimleri yeni nesil biçimlerde yayınlama
- Animasyonlu içerik için video biçimleri kullanma
Chrome Geliştirici Araçları iş akışı:
- Ağ etkinliğini günlüğe kaydetme
- Resim 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
Sınırlı zamanınız varsa…
Zamanınızı, büyük ve sık yüklenen resimleri tespit etmeye ve Squoosh gibi bir araçla manuel olarak optimize etmeye odaklayın. Başlıktaki resimler genellikle optimizasyon için iyi adaylardır.
Göz önünde bulundurulması gereken noktalar:
- Boyut: Resimler gerekli olandan daha büyük olmamalıdır.
- Sıkıştırma: Genel olarak, 80-85 kalite seviyesi, resim kalitesi üzerinde çok az bir etki yaratırken dosya boyutunda% 30-40 oranında bir azalma sağlar.
- 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 bölümünü oluşturuyorsa resim CDN'si oluşturmayı düşünebilirsiniz. Resim CDN'leri, resimleri yayınlamak ve optimize etmek için tasarlanmıştır ve resim yayınlama yükünü kaynak sunucudan alır. Resim CDN'si oluşturmak kolaydır ancak mevcut resim URL'lerinin resim CDN'sine yönlendirecek şekilde güncellenmesi gerekir.
Daha fazla bilgi:
JS ve CSS'yi küçültme
Küçültme işlemi, JavaScript ve CSS'den 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 bulunduğundan bu durum daha etkili olacaktır.
İzle
Sunucu izleme araçları, sunucu performansıyla ilgili veri toplama, kontrol panelleri ve uyarılar sağlar. Bu raporların kullanılması, gelecekte yaşanabilecek sunucu performansı sorunlarını önlemeye ve azaltmaya yardımcı olabilir.
İzleme kurulumu mümkün olduğunca basit tutulmalıdır. Aşırı veri toplama ve uyarılamanın maliyetleri vardır: Veri toplamanın kapsamı veya sıklığı ne kadar büyükse toplama ve depolama maliyeti de o kadar yüksek olur. Aşırı uyarı, kaçınılmaz olarak sayfaların göz ardı edilmesine yol açar.
Uyarılarda, sorunları tutarlı ve doğru bir şekilde algılayan metrikler kullanılmalıdır. Sunucu yanıt süresi (gecikme), bu konuda özellikle iyi çalışan bir metriktir: Çeşitli sorunları yakalar ve doğrudan kullanıcı deneyimiyle ilişkilidir. CPU kullanımı gibi daha düşük düzeyli metriklere dayalı uyarılar yararlı bir ek olabilir ancak daha küçük bir sorun grubunu yakalar. Ayrıca, uyarılar ortalamalar yerine uçta (yani 95. veya 99. yüzdelik dilimde) gözlemlenen performansa göre verilmelidir. Aksi takdirde, ortalamalar tüm kullanıcıları etkilemeyen sorunları kolayca gizleyebilir.
Düzelt
Tüm büyük bulut sağlayıcılar kendi izleme araçlarını (GCP, AWS, Azure) sunar. Ayrıca Netdata, ücretsiz ve açık kaynaklı mükemmel bir alternatiftir. Hangi aracı seçerseniz seçin, aracın izleme aracını izlemek istediğiniz her sunucuya yüklemeniz gerekir. İşlem tamamlandığında uyarı ayarlarını yaptığınızdan emin olun.
Talimatlar: