Анализ нагрузки на сервер позволит быстро понять причины медленной работы. Это необходимо делать еще и для того, чтобы вовремя планировать покупку новых серверов.
Аппаратная часть любого сервера состоит из 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%. Исключение составляют сервера специального назначения (например, пережиматоры фоток или медиа данных). Следующие показатели наиболее важные для анализа:
Более развернутую статистику можно получить используя утилиту 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 умеет показывать нагрузку на процессор в удобном виде:
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 умеет показывать развернутую загрузку диска.
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 приложение) – используют операции записи на диск. Необходимо обратить внимание на показатели:
Если диск подвержен большому количеству чтений, правильными вариантами поведения будут:
Большое количество записей на диск обычно свидетельствуют о необходимости масштабироваться.
Утилита 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
Внимание следует обратить на:
Не забывайте, что проблемы лучше предупреждать. Поэтому, обязательно используйте систему мониторинга для автоматического отслеживания указанных характеристик.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…