Если виртуальный или выделенный сервер не справляется с нагрузкой, сайты открываются медленно, а вместо контента появляются неприветливые ошибки. Всё это раздражает посетителей, и они уходят к конкурентам.
Чтобы этого не произошло, нужно следить за параметрами сервера. За какими и как – расскажем в этой статье.
- Как посмотреть общую нагрузку на сервер
- Как посмотреть нагрузку детально
- Как увидеть нагрузку через браузер
- Когда нагрузку создают Apache и Mysql
Как посмотреть общую нагрузку на сервер
Отслеживать нагрузку на ОС Windows позволяет «Диспетчер задач», в Linux свои инструменты.
Самая распространённая утилита мониторинга – top.

Top показывает среднюю нагрузку на сервер (Load Average) в течение 1, 5 и 15 минут. В идеале она должна быть меньше, чем количество ядер процессора. Например, LA 4 при четырёх ядрах означает: каждое ядро загружено на 100% — стоит снизить нагрузку.
Далее последовательно указаны самые «тяжёлые» процессы, сколько они потребляют оперативной памяти и CPU.
Другая утилита – atop – подсвечивает высокую нагрузку красным.

Схожий функционал предоставляет nmon – при нажатии определённых клавиш выдаёт графики нагрузки: процессор (с), чтение/запись диска (d), сеть (n) и память (m) и т. д. Список нужных клавиш будет отражен при запуске программы — в приветственном окне.

Как посмотреть нагрузку детально
Начнём с дисковой памяти — её не покажут перечисленные утилиты.
Ispmanager не открывается, а на сайтах возникает ошибка (например, Unable to connect to the database: Could not connect to MySQL), однако сам сервер доступен и пингуется. Скорее всего, закончилось место на диске, проверить это легко:
Команда df -h покажет все примонтированные разделы и сообщит, сколько места занято, а сколько свободно. Картина на скрине сигнализирует – место на диске нужно срочно освобождать:

du -hs /*
отобразит размер всех директорий:

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

Также можно освободить место через очистку временных файлов – логов, кеша, php-сессий.
С оперативной памятью по-другому – она динамична. Процессы запускаются, отработав, умирают, и показатели меняются ежесекундно. Оценить обстановку поможет free -m.
В строке -/+ buffers/cache увидим показатели used и free – использованная и свободная память.
По первой строке можно определить объем доступной пользователю памяти. Для этого сложите параметры free и cached, так как закешированая память также может быть использована приложениями.

Определить, какие процессы занимают память, поможет такой однострочник:
ps axo rss,comm,pid \
| awk '{ proc_list[$2]++; proc_list[$2 "," 1] += $1; } \
END { for (proc in proc_list) { printf("%d\t%s\n", \
proc_list[proc "," 1],proc); }}' | sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Если на первый взгляд ресурсов сервера хватает, но все равно чувствуются задержки, проверьте сетевой канал.
Всем VDS на хостинге предоставлен минимум стомегабитный канал, хватает его или нет покажет iftop, запущенный с ключом -m 100M.

На скриншоте видна белая полоса — это доступная ширина канала. Больше, чем наполовину, она занята процессом загрузки с серверов Яндекс. Когда полоса доходит до правой части экрана, весь доступный канал забит — необходимо увеличить пропускную способность сервера.
Также показатели трафика на VDS покажет VMmanager.
Если вы используете VMmanager 5, перейдите в раздел «Использование канала». На графиках видно, сколько трафика прошло через сервер за определённый период времени.

Если вы используете VMmanager 6, в разделе «Виртуальные машины» нажмите на ваш сервер и выберите пункт «Статистика».
.png)
В этом разделе вы увидите графики нагрузки на разные ресурсы сервера. Трафик будет внизу.
.png)
Как увидеть нагрузку через браузер
Есть мониторинги нагрузки, например, Munin:

Или NetData:

Если на сервере установлена панель ispmanager, в ней также можно анализировать нагрузку по процессору, памяти, занимаемому дисковому пространству:

В списке самых прожорливых процессов Apache и Mysql
Если нагрузку создаёт Apache, то на сервер приходит множество запросов по 80, 443 портам. Для снижения нагрузки рекомендуется использовать на сервере Nginx, включить сжатие и кэширование статичных ресурсов.
Возможно, это легитимная посещаемость, поисковые боты или DDOS-атака. В случае поисковых ботов можно сократить время между запросами к серверу в учетной записи Яндекс.Вебмастер и Google Webmasters Tool. В случае атаки настройками не обойтись — необходимо подключить дополнительную защиту.
Ресурсы потребляет Mysql – проведите оптимизацию настроек службы с помощью Mysqltuner.
Также стоит по возможности оптимизировать SQL-запросы к базам данных. Проверьте их через отображения списка текущих операций Mysql — команда show full processlist.
И обратите внимание на показатель WA в top: значение больше 20 говорит о том, что информация не успевает записываться на диск – необходимы диски SSD или NVMe.