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
Proverite trenutno opterećenje
Pokrenite
uptimeda 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
Identifikujte proces koji troši CPU
Pokrenite
topi pritisnitePda sortirate po potrošnji CPU-a. Obratite pažnju na kolonu%CPUiCOMMAND. Za pregledniji prikaz instalirajtehtop(sudo apt install htopilisudo dnf install htop) i pokrenite ga. - 3
Pregledajte sve procese i njihove detalje
Koristite
ps aux --sort=-%cpu | head -n 10da vidite top 10 procesa po CPU-u. Za detalje o konkretnom procesu (PID) koristiteps -p PID -o pid,ppid,cmd,%cpu,%mem. - 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
Analizirajte logove aplikacije
Pregledajte logove servisa koji je sumnjiv:
journalctl -u ime_servisa -n 50ili fajlove u/var/log/. Tražite greške, ponavljajuće poruke ili neočekivane zahteve. - 6
Proverite memoriju i swap
Pokrenite
free -hivmstat 1 5. Ako se kolonesi/sopovećavaju (aktivno swapovanje), nedostatak RAM-a može biti uzrok visokog load-a. Razmotrite dodavanje memorije ili smanjenje broja procesa. - 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_servisailisudo kill -15 PID. Opcijusudo kill -9 PIDkoristite 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
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 pokrenitesudo systemctl daemon-reloadi restartujte servis. Za PHP-FPM podesitepm.max_children, a za bazumax_connections. Konsultujte dokumentaciju za tačne parametre. - 9
Proverite da li je reč o napadu
Pregledajte pristupne logove veb servera (
/var/log/nginx/access.logili 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.