Диагностика ресурсов сервера

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

Чтобы этого не произошло, нужно следить за параметрами сервера. За какими и как – расскажем в этой статье.

  1. Как посмотреть общую нагрузку на сервер
  2. Как посмотреть нагрузку детально
  3. Как увидеть нагрузку через браузер
  4. Когда нагрузку создают 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 — раздел “Нагрузка VM”.

На графиках видно, сколько трафика прошло через сервер за определённый период времени.

Как увидеть нагрузку через браузер

Есть мониторинги нагрузки, например, Munin:

 

Или NetData:

 

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

В списке самых прожорливых процессов Apache и Mysql

Если нагрузку создаёт Apache, то на сервер приходит множество запросов по 80, 443 портам. Для снижения нагрузки рекомендуется использовать на сервере Nginx, включить сжатие и кэширование статичных ресурсов.

Возможно, это легитимная посещаемость, поисковые боты или DDOS-атака. В случае поисковых ботов поможет включение таймаута (Сrawl-delay) в файле robots.txt. В случае атаки настройками сервера не обойтись — необходимо подключить дополнительную защиту.

Ресурсы потребляет Mysql – проведите оптимизацию настроек службы с помощью Mysqltuner.

Также стоит по возможности оптимизировать SQL-запросы к базам данных. Проверьте их через отображения списка текущих операций Mysql — команда show full processlist.

И обратите внимание на показатель WA в top: значение больше 20 говорит о том, что информация не успевает записываться на диск – необходимы диски SSD.