Što trebam učiniti ako Nginx poslužitelj ima visoko opterećenje CPU-a i procesnu upotrebu memorije?

Jeste li iznenada na poslu otkrili da je Nginxova upotreba CPU-a naglo porasla? Da stvar bude gora, višestruki radnički procesi Nginxa troše resurse kao ludi svaki put kad pogledam procese.

Gledajući ovu scenu, glava vam se užari i ne možete pomoći da vičete: "O moj Bože, hoće li server eksplodirati, ne brinite, to ne znači da će vaš server biti "gotov", ali Nginx Trebamo vas za sveobuhvatnu optimizaciju!

Analiza uzroka prekomjernog opterećenja Nginxa

Što trebam učiniti ako Nginx poslužitelj ima visoko opterećenje CPU-a i procesnu upotrebu memorije?

Prvo, moramo shvatiti,Zašto Nginx odjednom postaje "iscrpljen"?Mnogo je razloga za problem, ne bojte se, saznajmo zajedno u nastavku.

1. Nerazumna konfiguracija

U Nginx konfiguracijskoj datoteci najvažnija točka je worker_processes. Ovaj parametar određuje broj procesa koje pokreće Nginx.

  • Ako konfigurirate premalo radnih procesa, opterećenje CPU-a će porasti; ako ih konfigurirate previše, neće biti dovoljno memorije.
  • Morate pronaći točku ravnoteže, npr.Postavite worker_processes na 1 do 2 puta veći broj CPU jezgri.
  • Ako imate 4 jezgre onda probajte worker_processes 4 Ili ga postavite izravno na auto.

2. Broj posjeta raste

Ponekad opterećenje Nginxa iznenada poraste ne zato što ste pogriješili, već zato što je broj posjeta previsok.Visoko istovremeni zahtjevi za pristup uzrokovat će preopterećenje Nginx radnog procesa., svaki proces je preopterećen, a CPU i memorija su također puni. U ovom trenutku možda ćete morati poboljšati resurse poslužitelja, poput povećanja broja CPU jezgri ili povećanja memorije. Naravno, ovo je također podsjetnik: ne zaboravite razmotriti CDN rasterećenje ili balansiranje opterećenja.

3. Susreo se sa zlonamjernim napadima

Biti "vrlo popularan" na internetu nije uvijek dobra stvar. Zlonamjerni napadi vas mogu ciljati u bilo kojem trenutku. Ako ustanovite da je korištenje CPU-a neuobičajeno visoko i da je izvor IP zahtjeva sumnjiv, vrlo je vjerojatno da vaša web stranica pati od DDoS napada. U ovom trenutku,Morate odmah postaviti vatrozid ili ograničiti učestalost pristupa, kao što je korištenje trenutnog ograničavajućeg modula koji dolazi s Nginxom ili postavljanje IP crne liste.

Kako riješiti problem velike upotrebe memorije Nginx procesa?

Pitanje je zašto Nginx radni proces zauzima toliko resursa? Moramo početi s konfiguracijom i optimizirati je korak po korak.

Metoda konfiguracije

  1. Otvorite Nginx konfiguracijsku datoteku: Obično se glavna konfiguracijska datoteka Nginxa nalazi na /etc/nginx/nginx.conf.

  2. Postaviti worker_processes: Pronađeno u konfiguracijskoj datoteci events blokovi, postavke worker_processes vrijednost. ako nije events blok, trebate ga izraditi.

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

1. Ispravno postavljene worker_connections

nginx worker_connections Parametar određuje najveći broj veza koje svaki radni proces može obraditi. Ako je premalen, to će utjecati na performanse istovremenosti; ako je prevelik, može potrošiti previše resursa.

Kako izračunati odgovarajuću vrijednost?

Pod pretpostavkom da imate CPU s 4 jezgre i 16 GB RAM-a, sigurno je polazište worker_connections 4096.

Ali ako vaša web stranica ima puno prometa, razmislite o povećanju ove vrijednosti na 8192 kako biste osigurali da svaki proces može obraditi dovoljno zahtjeva.

events {
    worker_connections 8192;
}

Na taj će se način procesorska snaga Nginxa znatno poboljšati.

2. Podesite keepalive_timeout

Drugi ključni parametar za Nginx za obradu zahtjeva je keepalive_timeout.

Ova postavka određuje koliko dugo se može održavati veza klijenta s poslužiteljem.

Ako se postavi predugo, zauzet će previše resursa veze..

Možete pokušati keepalive_timeout Postavite na 15 sekundi za održavanje veze i oslobađanje resursa.

keepalive_timeout 15;

3. Optimizirajte ograničenja deskriptora datoteke

Prema zadanim postavkamaLinux Sustav ima ograničenje broja deskriptora datoteka koje može otvoriti svaki proces.

Ako Nginx treba obraditi veliki broj datoteka (kao što su statički resursi), možda ćete vidjeti pogrešku od Nginxa, upit "too many open files”.

možete proći worker_rlimit_nofile Povećaj ograničenje deskriptora datoteke, na primjer postavljen na 65535.

worker_rlimit_nofile 65535;

4. Omogući predmemoriju i gzip

Predmemorija i kompresija dva su ključna za optimizaciju performansi web stranice.

Omogućavanjem Nginxove funkcije predmemoriranja, statički resursi (kao što su slike i JS datoteke) mogu se predmemorirati u memoriju, čime se uvelike smanjuje opterećenje poslužitelja.

Osim toga, uključivanje funkcije kompresije gzip može smanjiti količinu prenesenih podataka i poboljšati brzinu web stranice.

gzip on;
gzip_types text/plain application/javascript;

5. Analizirajte korištenje Nginx resursa

Konačno, ako ste dovršili sve gore navedene optimizacije, ali Nginx još uvijek zauzima puno CPU-a, možda ćete morati koristiti neke alate za dubinsku analizu.

使用 top Ili htop Pogledajte potrošnju resursa procesa u stvarnom vremenu,po strace Pratite pozive sustava ili koristite nmon Generirajte izvješća o izvedbi. Samo sveobuhvatnom analizom stvarnog rada Nginxa možemo izvršiti preciznije podešavanje.

总结

Nemojte paničariti kada Nginxova upotreba CPU-a naglo poraste. To može biti samo uzrokovano nepravilnom konfiguracijom ili pretjeranim prometom.

kroz razumne prilagodbe worker_processesworker_connectionsOmogućavanjem predmemoriranja, optimiziranjem vremenskih ograničenja i deskriptora datoteka, možete značajno smanjiti pritisak opterećenja na Nginx.

Nginx je moćan web poslužitelj koji, kada je pravilno optimiziran, može pružiti izvrsne performanse za vašu web stranicu.

Zapamtite, na sva pitanja možete odgovoritiznanostmetode za njegovo rješavanje, optimizacija performansi poslužitelja nije iznimka.

Pratite i prilagođavajte na vrijeme, ključ je za održavanje učinkovitog rada Nginxa. Ako svladate ove tehnike, vaša će web stranica biti sigurna čak i u slučaju velikog prometa ili zlonamjernih napada.

Nadam se da vas je ovaj članak inspirirao, požurite i optimizirajte svoj Nginx!

发表 评论

Vaša email adresa neće biti objavljena. Koriste se obavezna polja * Označiti

Dođite na vrh