Aşırı yüklenmiş sunucuyu düzeltme

Bir sunucunun performans sorununu belirleme, bu sorunu hızlıca çözme, sunucu performansını iyileştirme ve regresyonları önleme.

Katie Hempenius
Katie Hempenius

Genel Bakış

Bu kılavuzda, aşırı yüklenmiş bir sunucuyu 4 adımda nasıl çözülür?

  1. Değerlendirme: Sunucunun performans sorununu belirleyin.
  2. Dengeleme: Etkiyi azaltmak için hızlı düzeltmeler uygulayın.
  3. İyileştirme: Sunucu özelliklerini artırın ve optimize edin.
  4. İzleme: Gelecekte sorun yaşanmasını önlemek için otomatik araçlar kullanın.

Değerlendirme

Trafik bir sunucuyu aşırı yüklediğinde aşağıdakilerden biri veya daha fazlası darboğaz oluşturabilir: 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. Sunucu performansı genellikle CPU kullanımı yaklaşık %80-90'a ulaştığında düşer ve kullanım %100'e yaklaştıkça bu durum daha belirgin hale gelir. Tek bir isteği sunmanın CPU kullanımı önemsizdir ancak bunu trafikteki ani artışlar sırasında karşılaşılan ölçekte yapmak bazen sunucuyu zorlayabilir. Yayınlama işlemini başka bir altyapıya devretmek, pahalı işlemleri azaltmak ve istek miktarını sınırlamak CPU kullanımını azaltır.
  • Ağ: Trafiğin yoğun olduğu dönemlerde, kullanıcı isteklerini karşılamak için gereken ağ işleme hızı kapasiteyi aşabilir. Bazı siteler, barındırma sağlayıcısına bağlı olarak kümülatif veri aktarımıyla ilgili sınırlara da ulaşabilir. Sunucuya ve sunucudan aktarılan verilerin boyutunu ve miktarını azaltmak bu darboğazı ortadan kaldırır.
  • Bellek: Bir sistemde yeterli bellek olmadığında verilerin depolanmak üzere diske yüklenmesi gerekir. Diske erişim, belleğe erişimden çok daha yavaştır ve bu durum tüm uygulamayı yavaşlatabilir. Bellek tamamen tükenirse Yetersiz Bellek (OOM) hataları oluşabilir. Bellek ayırmayı düzenlemek, bellek sızıntılarını düzeltmek ve belleği yükseltmek bu darboğazı ortadan kaldırabilir.
  • Disk G/Ç: Verilerin diskten okunma veya diske yazılma hızı, diskin kendisi tarafından kısıtlanır. Disk G/Ç'si bir 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ılavuzdaki teknikler, CPU ve ağ darboğazlarını gidermeye odaklanır. Çoğu sitede, trafik artışı sırasında en alakalı darboğazlar CPU ve ağ olacaktır.

Etkilenen sunucuda top komutunu çalıştırmak, darboğazları incelemek için iyi bir başlangıç noktasıdır. Mümkünse bu verileri barındırma sağlayıcınızdan veya izleme aracınızdan alınan geçmiş verilerle destekleyin.

Sabitle

Aşırı yüklenen bir sunucu, sistemin başka yerlerinde hızla zincirleme hatalara yol açabilir. Bu nedenle, daha önemli değişiklikler yapmaya çalışmadan önce sunucuyu stabilize etmek önemlidir.

Sıklık sınırlaması

Sıklık sınırlaması, gelen isteklerin sayısını sınırlayarak altyapıyı korur. Sunucu performansı düştükçe bu durum daha da önem kazanır: Yanıt süreleri arttıkça kullanıcılar sayfayı agresif bir şekilde yenileme eğiliminde olur ve bu da sunucu yükünü daha da artırır.

Düzelt

Bir isteği reddetmek nispeten ucuz olsa da sunucunuzu korumanın en iyi yolu, sıklık sınırlamasını sunucunuzun yukarısındaki bir yerde (ör. yük dengeleyici, ters proxy veya CDN aracılığıyla) işlemektir.

Talimatlar:

Daha fazla bilgi:

HTTP önbelleğe alma

İçeriği daha agresif bir şekilde önbelleğe almanın 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 gösterir. Bu üstbilgileri denetleyip düzeltmek önbelleğe almayı iyileştirir.

Hizmet çalışanları da önbelleğe alma için kullanılabilir ancak ayrı bir önbellek kullanırlar ve uygun HTTP önbelleğe alma işleminin yerine geçmek yerine onu tamamlarlar. Bu nedenle, aşırı yüklenmiş bir sunucuyla ilgilenirken çalışmalar HTTP önbelleğe almayı optimize etmeye odaklanmalıdır.

Teşhis

Lighthouse'u çalıştırın ve kısa ila orta yaşam süresine (TTL) sahip kaynakların listesini görüntülemek için Statik öğeleri verimli bir önbellek politikasıyla sunun denetimine bakın. Listelenen her kaynak için TTL'nin artırılıp artırılmayacağını değerlendirin. Genel bir kural 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 üstbilgisinin max-age yönergesini uygun saniye sayısına ayarlayın.

Talimatlar:

Kontrollü azalma

Kontrollü azalma, bir sistemdeki aşırı yükü azaltmak 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ı sunmak, aramayı devre dışı bırakmak veya daha az arama sonucu döndürmek ya da belirli pahalı veya gerekli olmayan özellikleri devre dışı bırakmak. İşletme üzerinde minimum etkiyle güvenli ve kolay bir şekilde kaldırılabilecek işlevlerin kaldırılmasına öncelik verilmelidir.

Geliştirin

İçerik yayınlama ağı (CDN) kullanma

Statik öğelerin sunulması, sunucunuzdan bir içerik yayınlama ağına (CDN) devredilebilir ve böylece yük azaltılabilir.

CDN'nin birincil işlevi, kullanıcılara yakın konumda bulunan geniş bir sunucu ağı sağlayarak içeriği 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 çalıştırmak nadiren mantıklıdır. Temel bir CDN yapılandırması oldukça hızlı bir şekilde ayarlanır (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ı belirleyin. Sonuçlar sayfasında, bir CDN'den sunulması gereken kaynakların listesini görmek için "CDN'nin etkili kullanımı"nın üzerindeki kareyi tıklayın.

"CDN'nin etkili kullanımı" düğmesini gösteren ok
WebPageTest sonuçları

Düzelt

Bir kaynak CDN tarafından önbelleğe alınmıyorsa aşağıdaki koşulların karşılandığından emin olun:

İşlem kaynaklarını ölçeklendirme

İşlem kaynaklarını ölçeklendirme kararı dikkatli bir şekilde verilmelidir. Bilişim kaynaklarını ölçeklendirmek genellikle gerekli olsa da bunu zamanından önce yapmak gereksiz mimari karmaşıklığa ve finansal maliyetlere yol açabilir.

Teşhis

İlk bayta geçiş süresinin (TTFB) yüksek olması, sunucunun kapasitesine yaklaştığının bir işareti olabilir. Bu bilgiyi 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şarsa sunucularınızı artırmayı düşünmelisiniz.

Düzelt

Yük dengeleyici ekleyerek trafiği birden fazla sunucuya dağıtabilirsiniz. Yük dengeleyici, bir sunucu havuzunun önünde yer alır 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 kullanarak kendi yük dengeleyicinizi oluşturabilirsiniz. Yük dengeleyici kurulduktan sonra ek sunucular eklenebilir.

Çoğu bulut sağlayıcı, yük dengelemenin yanı sıra otomatik ölçeklendirme (GCP, AWS, Azure) de sunar. Otomatik ölçeklendirme, yük dengeleme ile birlikte çalışır. Otomatik ölçeklendirme, belirli bir zamanda talebe göre işlem kaynaklarını otomatik olarak artırır ve azaltır. Bununla birlikte, otomatik ölçeklendirme sihirli bir değnek değildir. Yeni örneklerin çevrimiçi olması zaman alır ve önemli bir yapılandırma gerektirir. Otomatik ölçeklendirmenin getirdiği ek karmaşıklık nedeniyle, öncelikle daha basit bir yük dengeleyici tabanlı 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ştir denetimini kullanın.

Düzelt

Sunucu yapılandırmanızı güncelleyerek sıkıştırmayı etkinleştirin. Talimatlar:

Resimleri ve medyayı optimize etme

Çoğu web sitesinin dosya boyutunun büyük bir kısmını resimler oluşturur. Resimleri optimize etmek, sitenin boyutunu hızlı ve önemli ölçüde azaltabilir.

Teşhis

Lighthouse'da, olası resim optimizasyonlarını işaretleyen çeşitli denetimler vardır. Alternatif olarak, en büyük resim dosyalarını belirlemek için Geliştirici Araçları'nı kullanabilirsiniz. Bu resimler muhtemelen optimizasyon için iyi adaylar olacaktır.

İlgili Lighthouse denetimleri:

Chrome Geliştirici Araçları iş akışı:

Düzelt

Sınırlı zamanınız varsa…

Zamanınızı büyük ve sık yüklenen resimleri belirlemeye ve bunları Squoosh gibi bir araçla manuel olarak optimize etmeye ayırın. Hero resimler genellikle optimizasyon için iyi adaylardır.

Göz önünde bulundurulması gereken noktalar:

  • Boyut: Görseller, gerekli olandan daha büyük olmamalıdır.
  • Sıkıştırma: Genel olarak, 80-85 kalite seviyesi, resim kalitesi üzerinde minimum etkiye sahip olurken dosya boyutunda %30-40 oranında azalma sağlar.
  • Biçim: Fotoğraflar için PNG yerine JPEG, animasyonlu içerikler 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şturabilirsiniz. Resim CDN'leri, resimleri sunmak ve optimize etmek için tasarlanmıştır ve resim sunma işlemini kaynak sunucudan devralır. Resim CDN'si oluşturmak kolaydır ancak mevcut resim URL'lerinin resim CDN'sini işaret edecek şekilde güncellenmesi gerekir.

Daha fazla bilgi:

JS ve CSS'yi sadeleştirme

Sadeleştirme, JavaScript ve CSS'deki gereksiz karakterleri kaldırır.

Teşhis

Sadeleştirilmesi gereken kaynakları belirlemek için CSS'yi sadeleştir ve JavaScript'i sadeleştir Lighthouse denetimlerini kullanın.

Düzelt

Zamanınız kısıtlıysa JavaScript'inizi sadeleştirmeye odaklanın. Çoğu sitede CSS'den daha fazla JavaScript bulunur. Bu nedenle, bu yöntem daha etkili olacaktır.

Gözle

Sunucu izleme araçları; sunucu performansıyla ilgili veri toplama, kontrol panelleri ve uyarılar sağlar. Bu araçları kullanmak, gelecekteki 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ı vermenin maliyetleri vardır: Veri toplamanın kapsamı veya sıklığı ne kadar büyükse, toplama ve depolama o kadar pahalı olur; aşırı uyarı, kaçınılmaz olarak sayfaların göz ardı edilmesine yol açar.

Uyarılar, sorunları tutarlı ve doğru bir şekilde tespit eden metrikleri kullanmalıdır. Sunucu yanıt süresi (gecikme), bu amaçla özellikle iyi çalışan 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 yararlı bir ek olabilir ancak sorunların daha küçük bir alt kümesini yakalar. Ayrıca uyarılar, ortalamalara değil, kuyrukta gözlemlenen performansa (başka bir deyişle 95. veya 99. yüzdelik dilimlere) dayalı olmalıdır. 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ı sunar (GCP, AWS, Azure). Ayrıca Netdata da mükemmel bir ücretsiz ve açık kaynaklı alternatiftir. Hangi aracı seçerseniz seçin, aracın izleme aracısını izlemek istediğiniz her sunucuya yüklemeniz gerekir. İşlem tamamlandığında uyarıları ayarlamayı unutmayın.

Talimatlar: