Nginx sunucusunda yüksek CPU yükü ve işlem belleği kullanımı varsa ne yapmalıyım?

İşyerinde aniden Nginx'in CPU kullanımının hızla arttığını mı keşfettiniz? Daha da kötüsü, Nginx'in çoklu çalışan süreçleri, süreçlere her baktığımda kaynakları deli gibi tüketiyor.

Bu sahneyi görünce başınız ısınıyor ve bağırmadan edemiyorsunuz: "Aman Tanrım, sunucu patlayacak mı?" Merak etmeyin, bu sunucunuzun "biteceği" anlamına gelmiyor. ancak Nginx'te kapsamlı bir optimizasyon yapmanıza ihtiyacımız var!

Aşırı Nginx yükünün nedenlerinin analizi

Nginx sunucusunda yüksek CPU yükü ve işlem belleği kullanımı varsa ne yapmalıyım?

Öncelikle, Nginx'in neden aniden "güçsüzleştiğini" anlamamız gerekiyor . Bu sorunun birçok nedeni var, bu yüzden endişelenmeyin, bunları birlikte inceleyelim.

1. Mantıksız yapılandırma

Nginx konfigürasyon dosyasında en önemli nokta worker_processes. Bu parametre Nginx tarafından başlatılan işlem sayısını belirler.

  • Çok az çalışan süreç yapılandırırsanız CPU yükü artar; çok fazla yapılandırırsanız bellek yetersiz kalır.
  • Bir denge noktası bulmalısınız, örneğin:Worker_processes'i CPU çekirdeği sayısının 1 ila 2 katı olarak ayarlayın.
  • 4 çekirdeğiniz varsa deneyin worker_processes 4 Veya doğrudan şuna ayarlayın: auto.

2. Ziyaretlerde artış

Bazen, Nginx yükündeki ani artış operasyonel hatalardan değil, aşırı istek hacminden kaynaklanır. Yüksek eşzamanlılık, Nginx'in çalışan süreçlerini aşırı yükleyebilir ve her sürecin kapasitesinin ötesinde çalışmasına, CPU ve bellek tüketmesine neden olabilir. Bu durumda, CPU çekirdek sayısını artırmak veya daha fazla bellek eklemek gibi sunucu kaynaklarını yükseltmeniz gerekebilir. Elbette, bu aynı zamanda bir hatırlatma niteliğindedir: CDN trafik dağıtımını veya yük dengelemesini de göz önünde bulundurmayı unutmayın.

3. Kötü niyetli saldırılarla karşılaşıldı

İnternette inanılmaz derecede popüler olmak her zaman iyi bir şey değildir; kötü niyetli saldırılar her an sizi hedef alabilir. Anormal derecede yüksek CPU kullanımı ve şüpheli IP adreslerinin talep edildiğini fark ederseniz, web siteniz büyük olasılıkla DDoS saldırısı altındadır. Bu durumda, hemen bir güvenlik duvarı kurmanız veya erişim sıklığını sınırlamanız gerekir ; örneğin Nginx'in yerleşik hız sınırlama modülünü kullanabilir veya bir IP kara listesi oluşturabilirsiniz.

Nginx işleminin yüksek bellek kullanımı sorunu nasıl çözülür?

Öyleyse soru şu: Nginx çalışan süreci neden bu kadar çok kaynak kullanıyor? Yapılandırmayla başlamalı ve adım adım optimize etmeliyiz.

Yapılandırma yöntemi

  1. Nginx yapılandırma dosyasını açın: Genellikle Nginx'in ana yapılandırma dosyası şu adreste bulunur: /etc/nginx/nginx.conf.

  2. Kurmak worker_processes: Yapılandırma dosyasında bulundu events bloklar, ayarlar worker_processes değer. değilse events blok, bir tane oluşturmanız gerekir.

    nginx
    events {
    worker_connections 1024;
    use epoll;  # 或者适用于操作系统的其他事件模型
    }

1. İşçi_bağlantılarını doğru şekilde ayarlayın

Nginx worker_connections Parametre, her bir alt işlemin işleyebileceği maksimum bağlantı sayısını belirler. Çok küçük olması eşzamanlılık performansını etkileyecektir; çok büyük olması ise çok fazla kaynak tüketebilir.

Uygun değer nasıl hesaplanır?

4 çekirdekli bir CPU'nuz ve 16 GB RAM'iniz olduğunu varsayarsak, güvenli bir başlangıç ​​noktası worker_connections 4096.

Ancak web sitenizde çok fazla trafik varsa her işlemin yeterli sayıda isteği işleyebildiğinden emin olmak için bu değeri 8192'ye yükseltmeyi düşünün.

events {
    worker_connections 8192;
}

Bu sayede Nginx'in işlem gücü büyük ölçüde artacaktır.

2. keepalive_timeout'u ayarlayın

Nginx'in istekleri işlemesi için bir diğer önemli parametre ise keepalive_timeout.

Bu ayar, istemcinin sunucuyla bağlantısının ne kadar süreyle sürdürülebileceğini belirler.

Süreyi çok uzun ayarlamak, bağlantı kaynaklarının aşırı tüketimine yol açabilir.

Deneyebilirsin keepalive_timeout Bağlantıyı sürdürmek ve kaynakları serbest bırakmak için 15 saniyeye ayarlayın.

keepalive_timeout 15;

3. Dosya tanımlayıcı sınırlarını optimize edin

Varsayılan olarak, Linux sistemleri her işlemin açabileceği dosya tanımlayıcı sayısını sınırlandırır.

Nginx'in çok sayıda dosyayı (statik kaynaklar gibi) işlemesi gerekiyorsa, Nginx'te "too many open files".

geçebilirsin worker_rlimit_nofile Dosya tanımlayıcı sınırını artırınörneğin 65535 olarak ayarlayın.

worker_rlimit_nofile 65535;

4. Önbelleğe almayı ve gzip'i etkinleştirin

Önbelleğe alma ve sıkıştırma, web sitesi performans optimizasyonunun iki anahtarıdır.

Nginx'in önbellekleme özelliğini etkinleştirerek, statik kaynaklar (resimler ve JS dosyaları gibi) bellekte önbelleğe alınabilir ve böylece sunucu yükü önemli ölçüde azaltılabilir.

Ayrıca gzip sıkıştırma fonksiyonunun açılması, iletilen veri miktarını azaltabilir ve web sitesi hızını artırabilir.

gzip on;
gzip_types text/plain application/javascript;

5. Nginx kaynak kullanımını analiz edin

Son olarak, yukarıdaki optimizasyonların tümünü tamamladıysanız ancak Nginx hala çok fazla CPU kullanıyorsa, derinlemesine analiz için bazı araçları kullanmanız gerekebilir.

使用 top 或 htop Bir sürecin gerçek zamanlı kaynak tüketimini görüntüleyin,geçmek strace Sistem çağrılarını izleyin veya kullanın nmon Performans raporları oluşturun. Yalnızca Nginx'in gerçek çalışmasını kapsamlı bir şekilde analiz ederek daha hassas ayarlamalar yapabiliriz.

sonuç olarak

Nginx'in CPU kullanımı arttığında paniğe kapılmayın. Bunun nedeni yalnızca yanlış yapılandırma veya aşırı trafik olabilir.

makul ayarlamalar yoluyla worker_processes 和 worker_connectionsÖnbelleğe almayı etkinleştirerek, zaman aşımlarını ve dosya tanımlayıcılarını optimize ederek Nginx üzerindeki yük baskısını önemli ölçüde azaltabilirsiniz.

Nginx, uygun şekilde optimize edildiğinde web siteniz için mükemmel performans sağlayabilen güçlü bir web sunucusudur.

Unutmayın, her sorun bilimsel olarak çözülebilir ve sunucu performansını optimize etmek de bunun bir istisnası değildir.

Nginx'in yüksek verimliliğini korumak için zamanında izleme ve ayarlamalar çok önemlidir. Bu tekniklere hakim olursanız, web siteniz yüksek trafik veya kötü amaçlı saldırılar altında bile güvende kalacaktır.

Umarım bu makale size ilham vermiştir, acele edin ve Nginx'inizi optimize edin!

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

En gidin