Прескочи на садржај
EVI Solutions

Висок CPU и лоад на Linuxu: како да откријете кривца

Средње 15 мин Ažurirano:

Кратак одговор

Висок CPU и лоад на Linuxu најчешће изазива један процес који троши превише ресурса, било због грешке у апликацији, лоше конфигурације или спољног напада. Користите `top`, `htop` и `ps` да пронађете процес, проверите да ли је реч о легитимном сервису, а затим га оптимизујте, ограничите или рестартујте. Ако се проблем понавља, анализирајте логове и конфигурацију.

Како се проблем препознаје

  • Server се споро одазива, SSH команде касне
  • Лоад авераге је стално изнад броја CPU језгара
  • Веб сајт или апликација ради успорено
  • Вентилатори рачунара раде пуном брзином
  • Мониторинг шаље аларме за висок CPU

Најчешћи узроци

Процес који троши превише CPU

Апликација, база података или скрипта могу ући у петљу или имати грешку која троши 100% једног језгра. То је најчешћи узрок високог лоад-а.

Лоше конфигурисан сервис

Nginx, MySQL, PHP-FPM или други сервис може бити погрешно подешен, па ствара превише радних процеса или захтева. Проверите конфигурацију и број процеса.

Спољни напад или ботови

Напад или агресивно индексирање могу генерисати велики број захтева и оптеретити CPU. Проверите приступне логове и заштитите сервис.

Недостатак меморије (swap)

Када понестане RAM-а, систем почиње да користи swap, што драстично повећава лоад и успорава рад. Проверите `free -h` и `vmstat`.

Процеси који су заглављени или се не завршавају

Скрипте које се не завршавају или процеси у дуготрајном стању `D` (чекање на И/О) могу повећати лоад. Зомби процеси сами по себи не троше CPU, али могу указивати на проблем са родитељским процесом. Прегледајте листу процеса и њихова стања.

Решење корак по корак

  1. 1

    Проверите тренутно оптерећење

    Покрените uptime да видите лоад авераге за 1, 5 и 15 минута. Упоредите вредности са бројем CPU језгара (nproc). Ако је лоад већи од броја језгара, систем може бити преоптерећен, посебно ако је и CPU искоришћен близу 100%.

  2. 2

    Идентификујте процес који троши CPU

    Покрените top и притисните P да сортирате по потрошњи CPU-а. Обратите пажњу на колону %CPU и COMMAND. За прегледнији приказ инсталирајте htop (sudo apt install htop или sudo dnf install htop) и покрените га.

  3. 3

    Прегледајте све процесе и њихове детаље

    Користите ps aux --sort=-%cpu | head -n 10 да видите топ 10 процеса по CPU-у. За детаље о конкретном процесу (PID) користите ps -p PID -o pid,ppid,cmd,%cpu,%mem.

  4. 4

    Проверите да ли је процес легитиман

    На основу назива и путање процеса утврдите да ли припада познатом сервису (нпр. nginx, mysqld, php-fpm). Ако нисте сигурни, проверите када је процес покренут (ps -p PID -o lstart) и ко га је покренуо (ps -p PID -o user).

  5. 5

    Анализирајте логове апликације

    Прегледајте логове сервиса који је сумњив: journalctl -u ime_servisa -n 50 или фајлове у /var/log/. Тражите грешке, понављајуће поруке или неочекиване захтеве.

  6. 6

    Проверите меморију и swap

    Покрените free -h и vmstat 1 5. Ако се колоне si/so повећавају (активно swapovanje), недостатак RAM-а може бити узрок високог лоад-а. Размотрите додавање меморије или смањење броја процеса.

  7. 7

    Зауставите или рестартујте проблематични сервис

    Ако идентификујете сервис, рестартујте га: sudo systemctl restart ime_servisa. Ако је процес непознат и сумњив, прво покушајте да га зауставите на безбедан начин: sudo systemctl stop ime_servisa или sudo kill -15 PID. Опцију sudo kill -9 PID користите само као крајњу меру, јер може довести до губитка или корупције података. Ако сервис уписује податке или користи базу, пре интервенције направите резервну копију.

  8. 8

    Ограничите ресурсе за сервис

    За сервисе под systemd-om, можете поставити ограничења у унит фајлу (нпр. CPUQuota=50%). После измене унит фајла покрените sudo systemctl daemon-reload и рестартујте сервис. За PHP-FPM подесите pm.max_children, а за базу max_connections. Консултујте документацију за тачне параметре.

  9. 9

    Проверите да ли је реч о нападу

    Прегледајте приступне логове веб сервера (/var/log/nginx/access.log или слично) и потражите велики број захтева са исте IP адресе. По потреби блокирајте IP преко firewall-a (sudo ufw deny from IP) или подесите рате лимитинг.

Ако ништа не помогне: дубља анализа

Ако се висок лоад понавља и не можете да га припишете ниједном процесу, користите напредне алате. pidstat -u 1 приказује потрошњу CPU-а по процесу у реалном времену (ако је инсталиран пакет sysstat). sudo iotop показује диск И/О, а vmstat 1 даје преглед системских ресурса. За детаљну анализу CPU-а користите perf top (ако је инсталиран) или strace -p PID да видите системске позиве процеса; strace може успорити процес, па га користите кратко. Такође, проверите да ли је у питању хардверски проблем (нпр. прегревање) помоћу sensors или dmesg | grep -i error. Ако сумњате на компромитацију, као root покрените rkhunter или chkrootkit и прегледајте cron задатке: crontab -l приказује само задатке тренутног корисника, а као root можете користити sudo crontab -l -u korisnik или прегледати /etc/crontab, /etc/cron.* и /var/spool/cron.

Како да спречите да се понови

  • Редовно ажурирајте софтвер и пратите безбедносне закрпе
  • Поставите мониторинг (нпр. `monit`, `netdata`) и аларме за висок лоад
  • Конфигуришите лимите ресурса за сервисе (systemd, PHP-FPM, база)
  • Прегледајте логове и анализирајте трендове оптерећења

Када је боље позвати стручњака

Ако не можете да идентификујете процес, сумњате на компромитацију или је потребна измена конфигурације критичних сервиса, обратите се IT стручњаку. Они могу брзо изоловати узрок и спречити дуже застоје.

Одржавање IT инфраструктуре · Сервери, мреже, backup, безбедност и хелпдеск

Честа питања

Шта значи лоад авераге и која вредност је прихватљива?

Лоад авераге показује просечан број процеса који чекају на CPU или И/О у последњих 1, 5 и 15 минута. Као грубо правило, прихватљиво је да буде мањи или једнак броју CPU језгара. Ако је стално већи, систем може бити преоптерећен.

Како да привремено смањим оптерећење без рестарта сервера?

Можете зауставити или рестартовати проблематични сервис, привремено ограничити CPU квоту за процес (нпр. `cpulimit`) или искључити непотребне сервисе ако сте сигурни да нису потребни. За брзу интервенцију користите `sudo kill -15 PID` на процес који највише троши; `sudo kill -9 PID` користите само као крајњу опцију и не на продукционе базе без претходне резервне копије.

Да ли је висок лоад увек проблем са CPU-ом?

Није. Висок лоад може бити последица спорог диска (И/О wait), недостатка меморије (swap) или великог броја процеса у недовршеном стању. Зато проверите `vmstat`, `iostat` и `free -h` пре него што закључите да је CPU кривац.

Подели
Нисте нашли решење?AI IT асистент је доступан 24/7. Опишите проблем или пошаљите screenshot грешке и добићете упутство за ваш случај.Питајте AI IT асистента