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

Ігор Грегорченко

Анализ нагрузки на сервер позволит быстро понять причины медленной работы. Это необходимо делать еще и для того, чтобы вовремя планировать покупку новых серверов.

Аппаратная часть любого сервера состоит из 4 основных компонент:

  • Процессор
  • Память
  • Диск
  • Сетевой интерфейс

Анализ загруженности сервера заключается в сборе и обработке статистики каждой из этих компонент.

Процессор

Первым делом следует проверить процессор. Самый быстрый способ – использовать top:

top - 22:20:45 up 67 days,  8:04,  2 users,  load average: 0.05, 0.03, 0.05
Tasks:  88 total,   1 running,  87 sleeping,   0 stopped,   0 zombie
%Cpu(s):  **0.0 us**,  0.0 sy,  0.0 ni,**100.0 id**,  **0.0 wa**,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    508936 total,   461096 used,    47840 free,    43056 buffers
KiB Swap:        0 total,        0 used,        0 free,   237892 cached

  PID USER      PR  NI  VIRT  RES  SHR S  **%CPU** %MEM    TIME+  COMMAND           
 8867 www-data  20   0 80316 3256 1012 S   0.3  0.6   0:16.06 nginx
30809 mysql     20   0  844m  63m 3332 S   0.3 12.9  38:30.93 mysqld    

Необходимо обратить внимание на выделенные участки. Загрузка процессора обычно не должна превышать 10…20%. Исключение составляют сервера специального назначения (например, пережиматоры фоток или медиа данных). Следующие показатели наиболее важные для анализа:

  • Показатель us – пользовательские процессы. Высокий показатель означает, что наше приложение нагружает сервер.
  • Показатель id – неиспользуемые ресурсы процессора. Этот показатель должен быть высоким (нормальные значения от 80 до 100).
  • Показатель wa – ожидание операций ввода/вывода. Высокий показатель означает, что процессор очень долго ждет ответы от устройств ввода/вывода. Чаще всего это связано с большим количеством операций на диске.

mpstat

Более развернутую статистику можно получить используя утилиту mpstat из пакета sysstat:

apt-get install sysstat
mpstat -P ALL

Покажет детали по всем процессорам на сервере:

10:30:26 PM  CPU    **%usr**   %nice    %sys **%iowait**    %irq   %soft  %steal  %guest  %gnice   **%idle**
10:30:26 PM  all    0.47    0.00    0.22    0.07    0.00    0.01    0.03    0.00    0.00   99.20
10:30:26 PM    0    0.47    0.00    0.22    0.07    0.00    0.01    0.03    0.00    0.00   99.20

htop

Инструмент htop умеет показывать нагрузку на процессор в удобном виде:

apt-get install htop
htop
  **CPU[||||||||                                               11.3%]**     Tasks: 62, 93 thr; 1 running
  Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||170/497MB]     Load average: 0.15 0.05 0.06 
  Swp[                                                       0/0MB]     Uptime: 67 days, 08:22:09

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 9377 root       20   0 24596  2064  1372 R  0.5  0.4  0:00.22 htop
 9458 www-data   20   0  315M  7328  2824 S  0.0  1.4  0:00.50 php-fpm: pool www

Анализ нагрузки на процессор

Если показатель загрузки процессора (us в top’e) превышает 20%, необходимо оценить возможность оптимизации приложения. Если возможная оптимизация уже была выполнена, необходимо приобретать дополнительные сервера.

В случае высокого показателя ожидания I/O (wa в top’e), необходимо провести дальнейший анализ дисковой и сетевой подсистемы (ниже).

Память

Прежде всего необходимо определить количество занятой и свободной памяти:

free

Покажет данные об использовании памяти:

             total       used       **free**     shared    buffers     cached
Mem:        508936     480540      **28396**          0      47552     258912
-/+ buffers/cache:     174076     334860
**Swap:            0          0          0**

## Результат команды free

Важно обратить внимание на значение free. Это количество свободной памяти. Очень важным показателем является Swap. Это используемое место на диске в том случае, когда оперативной памяти перестает хватать.

Более подробную информацию об использовании оперативной памяти можно получить так:

cat /proc/meminfo

Среди прочего увидим такие сведения:

MemTotal:         508936 kB
**MemFree:           28148 kB**
Buffers:           47836 kB
Cached:           259388 kB
SwapCached:            0 kB
Active:           245556 kB
Inactive:         178600 kB
...
**SwapTotal:             0 kB**
...

Анализ использования памяти

Малое количество свободной оперативной памяти не является проблемой. Но такая ситуация является предлогом для пристального наблюдения за сервером.

В случае же, если начинает расти Swap, необходимо срочно принимать меры:

  • Добавлять оперативную память.
  • Приобретать новые сервера и распределять нагрузку между ними.

Старайтесь всегда удерживать используемый своп нулевым.

Диски

Дисковая подсистема может быть нагружена, когда приложение работает с файлами. Кроме этого, диски может нагружать работа с базой данных.

Начать анализ дисков следует с проверки свободного места:

df -h

Покажет результат по всем разделам:

Filesystem                 Size  Used Avail **Use%** Mounted on
rootfs                      20G  2.4G   17G  **13%** /
udev                        10M     0   10M   **0%** /dev
tmpfs                      5.0M     0  5.0M   **0%** /run/lock

Колонка Use покажет занятое место. Для основных разделов старайтесь удерживать значение не выше 90%.

iotop

Инструмент iotop умеет показывать развернутую загрузку диска.

apt-get install iotop
iotop

Также будет видно распределение по процессам, которые работают с диском:

Total DISK READ :       **0.00 B/s** | Total DISK WRITE :       **2.10 M/s**
Actual DISK READ:       **0.00 B/s** | Actual DISK WRITE:     **218.22 K/s**
  TID  PRIO  USER     **DISK READ  DISK WRITE**  SWAPIN     IO>    COMMAND                                                                       
30835 be/4 mysql       **0.00 B/s    2.95 K/s**  0.00 %  0.07 % mysqld
10273 be/4 www-data    **0.00 B/s  194.63 K/s**  0.00 %  0.00 % php-fpm: pool www

В примере два процесса – mysqld и php-fpm (это php приложение) – используют операции записи на диск. Необходимо обратить внимание на показатели:

  • Actual DISK READ – суммарное фактическое количество данных, читаемых с диска. Отличается от Total DISK READ из-за дискового кэша и оптимизации операций низкого уровня.
  • Actual DISK WRITE – суммарное фактическое количество данных, записываемое на диск. Может отличаться от Total DISK WRITE по той же причине.

Анализ

Чтение

Если диск подвержен большому количеству чтений, правильными вариантами поведения будут:

  • В случае, если большинство чтений происходит из приложения, необходимо включить кэширование APC. Если Ваше приложение читает большое количество файлов, продумайте возможность переноса их данных в кэш.
  • В случае базы данных убедитесь в правильной настройке ее параметров.
  • Если чтения происходят в результате обращения к Web серверу (отдача большого количества файлов), обдумайте возможность использования HTTP кэша.

Запись

Большое количество записей на диск обычно свидетельствуют о необходимости масштабироваться.

  • Убедитесь, что у Вас отключены все логи доступа и отладки. Например, accesslog в Nginx’e.
  • Большинство записей на диск скорее всего будет генерировать база данных. В таком случае необходимо подумать о выносе ее на отдельный сервер. Дальнейшими шагами будет ее масштабирование на несколько серверов.
  • Большое количество записей также могут генерировать загружаемые файлы. Читайте о масштабирование в таких случаях на примере хранилища изображений.

Сеть

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

apt-get install cbm
cbm

Увидим данные об объеме приема и передачи в секунду:

Interface                            Receive                           Transmit                          Total
lo                                   10.07 MB/s                        10.07 MB/s                        20.13 MB/s
eth0                                 73.15 kB/s                         2.44 MB/s                         2.51 MB/s

Высокий сетевой трафик сам по себе не является проблемой. Но близкие к пиковым показатели указывают на необходимость масштабироваться в ближайшем будущем. Например, средний трафик в 95 Мбит на интерфейсе в 100 Мбит скорее всего будет означать, что текущего сервера вскоре будет недостаточно.

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

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

apt-get install dstat
dstat

Увидим данные о системе с интервалом в одну секунду:

----**total-cpu-usage**---- -**dsk/total**- -**net/total**- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0  99   0   0   0| 873B   18k|   0     0 |   0     0 |  33    75 
  0   0 100   0   0   0|   0    48k| 640B 1550B|   0     0 |  31    80 
  0   0 100   0   0   0|   0     0 | 422B 1110B|   0     0 |  29    66 
  0   0 100   0   0   0|   0     0 | 590B 1110B|   0     0 |  32    70 
  1   0  99   0   0   0|   0     0 | 478B 1110B|   0     0 |  31    66 
  0   0 100   0   0   0|   0     0 | 814B 1110B|   0     0 |  34    63 
  0   0 100   0   0   0|   0     0 | 814B 1110B|   0     0 |  39    70 
  0   0 100   0   0   0|   0    20k| 814B 1110B|   0     0 |  40    75 

Внимание следует обратить на:

  • total-cpu-usage – загрузка процессора
  • dsk/total – загрузка диска
  • net/total – загрузка сети

Самое важное

Не забывайте, что проблемы лучше предупреждать. Поэтому, обязательно используйте систему мониторинга для автоматического отслеживания указанных характеристик.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024