Анализ нагрузки на сервер

Как отслеживать загрузку процессора, памяти, диска и сети на Linux-сервере.

Нагрузка на сервер — процент использования ключевых ресурсов: процессора (CPU), оперативной памяти (RAM) и дискового пространства. Анализ этих показателей помогает быстро выявить причины медленной работы.

Аппаратная часть сервера состоит из четырёх основных компонентов: процессор, память, диск и сетевой интерфейс. Анализ нагрузки сводится к сбору и интерпретации статистики по каждому из них.

Процессор

Для базового мониторинга CPU используется утилита top:

top

Пример вывода:

top - 13:29:39 up 7 days,  1:10,  1 user,  load average: 0.03, 0.03, 0.00
Tasks: 104 total,   2 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  1.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  1.3 si,  0.3 st
MiB Mem :    969.5 total,     68.8 free,    635.9 used,    264.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    106.7 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    823 mysql     20   0 1852008 401812      0 S   1.0  40.5  81:24.20 mysqld
     13 root      20   0       0      0      0 R   0.3   0.0  26:11.00 rcu_sched
    695 redis     20   0   66776   4216   2100 S   0.3   0.4  19:55.21 redis-server

Ключевые показатели:

  • us — нагрузка от пользовательских процессов. Высокое значение означает, что приложение активно использует CPU.
  • id — простой процессора. В норме должен быть высоким — от 80 до 100%.
  • wa — ожидание операций ввода/вывода. Высокое значение указывает на перегрузку дисковой подсистемы.

Загрузка процессора (us) не должна стабильно превышать 20%. Если превышает — стоит рассмотреть оптимизацию приложения или масштабирование.

Развёрнутую статистику по каждому ядру даёт утилита mpstat из пакета sysstat:

apt-get install sysstat
mpstat -P ALL

Пример вывода:

Linux 5.15.0-46-generic (dsde1139-22869.fornex.org)    09/06/2022  _x86_64_   (1 CPU)

02:37:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:37:21 PM  all    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95
02:37:21 PM    0    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95

Для наглядного мониторинга в реальном времени удобна утилита htop:

apt-get install htop
htop

htop Мониторинг процессора в htop

Память

Для проверки использования оперативной памяти используется команда free:

free

Пример вывода:

               total        used        free      shared  buff/cache   available
Mem:          992724      655200       73968       86748      263556      104972
Swap:              0           0           0

Особое внимание следует уделить показателю Swap — он отражает использование дискового пространства в качестве памяти, когда RAM заканчивается. Само по себе малое количество свободной RAM не критично, но рост Swap требует немедленных мер: добавления памяти или распределения нагрузки между несколькими серверами.

Для детального анализа памяти используется:

cat /proc/meminfo

Пример вывода:

MemTotal:         992724 kB
MemFree:           73192 kB
MemAvailable:     104864 kB
Buffers:           10856 kB
Cached:           226868 kB
SwapCached:            0 kB
...

Диск

Проверку дисковой подсистемы начните с просмотра свободного места:

df -h

Пример вывода:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs            97M  732K   97M   1% /run
/dev/vda1       9.8G  8.5G  846M  92% /
tmpfs           485M     0  485M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            97M     0   97M   0% /run/user/0

Столбец Use% показывает процент занятого места на каждом разделе.

Для мониторинга операций чтения и записи в разбивке по процессам используется iotop:

apt-get install iotop
iotop

Пример вывода:

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
      1 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  init
      2 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [kthreadd]
    ...

Ключевые показатели:

  • Actual DISK READ — фактический объём данных, читаемых с диска (с учётом кэша).
  • Actual DISK WRITE — фактический объём данных, записываемых на диск.

Рекомендации при высокой нагрузке на диск:

  • Много чтений из приложения — включите кэширование APC.
  • Много чтений из базы данных — проверьте настройки БД.
  • Много чтений от веб-сервера — рассмотрите использование HTTP-кэша.
  • Много записей — убедитесь, что отключены все логи доступа и отладки; скорее всего, основной источник записей — база данных или загружаемые файлы.

Сеть

Утилита cbm показывает сетевой трафик в реальном времени:

apt-get install cbm
cbm

Пример вывода:

Interface      Receive          Transmit         Total
lo             0.00 B/s         0.00 B/s         0.00 B/s
eth0           35.90 kB/s       758.75 B/s       36.65 kB/s

Высокий сетевой трафик сам по себе не является проблемой, однако показатели, близкие к пиковым, сигнализируют о необходимости масштабирования.

Общая статистика

Утилита dstat отображает сводную статистику по всем подсистемам с интервалом в одну секунду:

apt-get install dstat
dstat

Пример вывода:

--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
  2   1  97   0   0|  35k   29k|   0     0 |   0     0 | 683   702
  1   0  99   0   0| 124k    0 |  39k 1162B|   0     0 |1003   822
  3   4  86   6   1|3580k 8776k|  37k  522B|   0     0 |1161  1018

Ключевые столбцы:

  • total-cpu-usage — загрузка процессора.
  • dsk/total — активность дисковой подсистемы.
  • net/total — сетевая активность.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Обновлено:
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам