Preskoči na sadržaj

Visok CPU i load na Linuxu: kako da otkrijete krivca

Srednje 15 min Ažurirano:

Kratak odgovor

Visok CPU i load na Linuxu najčešće izaziva jedan proces koji troši previše resursa, bilo zbog greške u aplikaciji, loše konfiguracije ili spoljnog napada. Koristite `top`, `htop` i `ps` da pronađete proces, proverite da li je reč o legitimnom servisu, a zatim ga optimizujte, ograničite ili restartujte. Ako se problem ponavlja, analizirajte logove i konfiguraciju.

Kako se problem prepoznaje

  • Server se sporo odaziva, SSH komande kasne
  • Load average je stalno iznad broja CPU jezgara
  • Veb sajt ili aplikacija radi usporeno
  • Ventilatori računara rade punom brzinom
  • Monitoring šalje alarme za visok CPU

Najčešći uzroci

Proces koji troši previše CPU

Aplikacija, baza podataka ili skripta mogu ući u petlju ili imati grešku koja troši 100% jednog jezgra. To je najčešći uzrok visokog load-a.

Loše konfigurisan servis

Nginx, MySQL, PHP-FPM ili drugi servis može biti pogrešno podešen, pa stvara previše radnih procesa ili zahteva. Proverite konfiguraciju i broj procesa.

Spoljni napad ili botovi

Napad ili agresivno indeksiranje mogu generisati veliki broj zahteva i opteretiti CPU. Proverite pristupne logove i zaštitite servis.

Nedostatak memorije (swap)

Kada ponestane RAM-a, sistem počinje da koristi swap, što drastično povećava load i usporava rad. Proverite `free -h` i `vmstat`.

Procesi koji su zaglavljeni ili se ne završavaju

Skripte koje se ne završavaju ili procesi u dugotrajnom stanju `D` (čekanje na I/O) mogu povećati load. Zombi procesi sami po sebi ne troše CPU, ali mogu ukazivati na problem sa roditeljskim procesom. Pregledajte listu procesa i njihova stanja.

Rešenje korak po korak

  1. 1

    Proverite trenutno opterećenje

    Pokrenite uptime da vidite load average za 1, 5 i 15 minuta. Uporedite vrednosti sa brojem CPU jezgara (nproc). Ako je load veći od broja jezgara, sistem može biti preopterećen, posebno ako je i CPU iskorišćen blizu 100%.

  2. 2

    Identifikujte proces koji troši CPU

    Pokrenite top i pritisnite P da sortirate po potrošnji CPU-a. Obratite pažnju na kolonu %CPU i COMMAND. Za pregledniji prikaz instalirajte htop (sudo apt install htop ili sudo dnf install htop) i pokrenite ga.

  3. 3

    Pregledajte sve procese i njihove detalje

    Koristite ps aux --sort=-%cpu | head -n 10 da vidite top 10 procesa po CPU-u. Za detalje o konkretnom procesu (PID) koristite ps -p PID -o pid,ppid,cmd,%cpu,%mem.

  4. 4

    Proverite da li je proces legitiman

    Na osnovu naziva i putanje procesa utvrdite da li pripada poznatom servisu (npr. nginx, mysqld, php-fpm). Ako niste sigurni, proverite kada je proces pokrenut (ps -p PID -o lstart) i ko ga je pokrenuo (ps -p PID -o user).

  5. 5

    Analizirajte logove aplikacije

    Pregledajte logove servisa koji je sumnjiv: journalctl -u ime_servisa -n 50 ili fajlove u /var/log/. Tražite greške, ponavljajuće poruke ili neočekivane zahteve.

  6. 6

    Proverite memoriju i swap

    Pokrenite free -h i vmstat 1 5. Ako se kolone si/so povećavaju (aktivno swapovanje), nedostatak RAM-a može biti uzrok visokog load-a. Razmotrite dodavanje memorije ili smanjenje broja procesa.

  7. 7

    Zaustavite ili restartujte problematični servis

    Ako identifikujete servis, restartujte ga: sudo systemctl restart ime_servisa. Ako je proces nepoznat i sumnjiv, prvo pokušajte da ga zaustavite na bezbedan način: sudo systemctl stop ime_servisa ili sudo kill -15 PID. Opciju sudo kill -9 PID koristite samo kao krajnju meru, jer može dovesti do gubitka ili korupcije podataka. Ako servis upisuje podatke ili koristi bazu, pre intervencije napravite rezervnu kopiju.

  8. 8

    Ograničite resurse za servis

    Za servise pod systemd-om, možete postaviti ograničenja u unit fajlu (npr. CPUQuota=50%). Posle izmene unit fajla pokrenite sudo systemctl daemon-reload i restartujte servis. Za PHP-FPM podesite pm.max_children, a za bazu max_connections. Konsultujte dokumentaciju za tačne parametre.

  9. 9

    Proverite da li je reč o napadu

    Pregledajte pristupne logove veb servera (/var/log/nginx/access.log ili slično) i potražite veliki broj zahteva sa iste IP adrese. Po potrebi blokirajte IP preko firewall-a (sudo ufw deny from IP) ili podesite rate limiting.

Ako ništa ne pomogne: dublja analiza

Ako se visok load ponavlja i ne možete da ga pripišete nijednom procesu, koristite napredne alate. pidstat -u 1 prikazuje potrošnju CPU-a po procesu u realnom vremenu (ako je instaliran paket sysstat). sudo iotop pokazuje disk I/O, a vmstat 1 daje pregled sistemskih resursa. Za detaljnu analizu CPU-a koristite perf top (ako je instaliran) ili strace -p PID da vidite sistemske pozive procesa; strace može usporiti proces, pa ga koristite kratko. Takođe, proverite da li je u pitanju hardverski problem (npr. pregrevanje) pomoću sensors ili dmesg | grep -i error. Ako sumnjate na kompromitaciju, kao root pokrenite rkhunter ili chkrootkit i pregledajte cron zadatke: crontab -l prikazuje samo zadatke trenutnog korisnika, a kao root možete koristiti sudo crontab -l -u korisnik ili pregledati /etc/crontab, /etc/cron.* i /var/spool/cron.

Kako da sprečite da se ponovi

  • Redovno ažurirajte softver i pratite bezbednosne zakrpe
  • Postavite monitoring (npr. `monit`, `netdata`) i alarme za visok load
  • Konfigurišite limite resursa za servise (systemd, PHP-FPM, baza)
  • Pregledajte logove i analizirajte trendove opterećenja

Kada je bolje pozvati stručnjaka

Ako ne možete da identifikujete proces, sumnjate na kompromitaciju ili je potrebna izmena konfiguracije kritičnih servisa, obratite se IT stručnjaku. Oni mogu brzo izolovati uzrok i sprečiti duže zastoje.

Održavanje IT infrastrukture · Serveri, mreže, backup, bezbednost i helpdesk

Česta pitanja

Šta znači load average i koja vrednost je prihvatljiva?

Load average pokazuje prosečan broj procesa koji čekaju na CPU ili I/O u poslednjih 1, 5 i 15 minuta. Kao grubo pravilo, prihvatljivo je da bude manji ili jednak broju CPU jezgara. Ako je stalno veći, sistem može biti preopterećen.

Kako da privremeno smanjim opterećenje bez restarta servera?

Možete zaustaviti ili restartovati problematični servis, privremeno ograničiti CPU kvotu za proces (npr. `cpulimit`) ili isključiti nepotrebne servise ako ste sigurni da nisu potrebni. Za brzu intervenciju koristite `sudo kill -15 PID` na proces koji najviše troši; `sudo kill -9 PID` koristite samo kao krajnju opciju i ne na produkcione baze bez prethodne rezervne kopije.

Da li je visok load uvek problem sa CPU-om?

Nije. Visok load može biti posledica sporog diska (I/O wait), nedostatka memorije (swap) ili velikog broja procesa u nedovršenom stanju. Zato proverite `vmstat`, `iostat` i `free -h` pre nego što zaključite da je CPU krivac.

Podeli
Niste našli rešenje?AI IT asistent je dostupan 24/7. Opišite problem ili pošaljite screenshot greške i dobićete uputstvo za vaš slučaj.Pitajte AI IT asistenta