Анализ нагрузки на веб-сервер linux. мониторинг нагрузки web-сервера.

Анализ нагрузки на веб-сервер Linux. Мониторинг нагрузки web-сервера

Опубликовано: 12.09.2018

Тематические термины: веб-сервер, nginx, Apache, PHP-FPM.

В данной статье пойдет речь о мониторинге нагрузки, именно, в контексте веб-сервера. Мы не будем особо заострять внимание на проверке производительности системы, как, например, командами top, htop, free и так далее.

Нагрузка на сервер

Проверить, нагружен ли сервер, а также понять, какой именно процесс больше всего потребляет ресурсов можно с помощью команд:

* по сути, все 3 вышеперечисленные команды выдают одну и туже информацию в разном виде. Какой-то из них может оказаться удобнее пользоваться. Утилита top встроена в систему, для использования остальных необходимо установить одноименные пакеты.

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

* предыдущие команды тоже показывали утилизацию памяти, но кому-то команда free может показаться нагляднее.

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

* по умолчанию, утилита не установлена в системе. Необходимо инсталлировать одноименный пакет.

Что грузит систему

Даже, если мы увидим, что на веб-сервере заканчивается оперативная память или загружен процессор, мы не сможем найти источник проблемы, которым, чаще всего, является некорректно работающий скрипт. Поэтому, определяем, какой файл на сервере вызывает нагрузку.

Использование lsof

lsof — утилита командной строки, которая отображает какие файлы используются процессами. Она позволит определить, к каким скриптам идет обращение со стороны веб-сервера. Для начала, необходимо установить lsof.

В CentOS / Red Hat:

В Ubuntu / Debian:

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

* первая команда покажет, к каким файлам обращается apache, вторая — php-fpm (часто можно увидеть в связке с nginx).

Анализ error-логов

Анализ логов ошибок позволит не только обнаружить проблемы в работе сайта, но и найти причину его медленной работы. По умолчанию, логи находятся в каталоге /var/log. Если мы не меняли расположение логов, запускаем следующие команды:

tail -f /var/log/nginx/error.log

* лог ошибок nginx.

tail -f /var/log/php-fpm/error.log

* лог ошибок php-fpm.

tail -f /var/log/httpd/error_log

* лог ошибок apache в CentOS.

tail -f /var/log/apache2/error_log

* лог ошибок apache в Ubuntu.

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

Статистика веб-сервера

Для веб-серверов можно воспользоваться служебной страницей просмотра статуса. Она может показать статистику запросов к веб-серверу.

Apache

Для Apache необходим модуль mod_status, который идет в комплекте с данным веб-сервером. Проверить подключение модуля можно в конфигурационном файле httpd.conf (в разных Linux системах может находится в различных каталогах).

По умолчанию, server-status не активен. Создаем конфигурационный файл.

Для CentOS / Red Hat:

vi /etc/httpd/conf.d/server-status.conf

Для Ubuntu / Debian:

vi /etc/apache2/sites-enabled/server-status.conf

* где 2 — используемая версия apache.

В открытый конфигурационный файл добавим:

ExtendedStatus on   servername 111.111.111.111       Sethandler server-status       SetHandler server-status

* где 111.111.111.111 — IP-адрес нашего веб-сервера; 80 — порт, на котором слушает apache.

* в данном примере мы прописали два варианта просмотра статистики: первый — обращение в браузере к серверу по IP-адресу + /server-status; второй — обращение к любому сайту + /server-status.

Разные способы оправданы для разных настроек самих сайтов и используемых CMS.

Проверим корректность внесенных данных и перезапустим веб-сервер apache:

systemctl restart httpd || systemctl restart apache2

Теперь открываем браузер и вводим название сайта + /server-status, например, http://www.dmosk.ru/server-status. Или обращаемся к серверу по IP-адресу, например, http://111.111.111.111/server-status.

NGINX + PHP-FPM

Открываем конфигурационный файл nginx:

В секцию http добавляем:

…     server {         listen 80;         server_name 111.111.111.111;         location /server-status {               stub_status on;         }     }

* где 111.111.111.111 — IP-адрес нашего веб-сервера.

Проверяем корректность настройки и перезапускаем nginx:

Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:

Теперь настроим статистику для php-fpm. В конфигурационном файле nginx в нашу директиву server добавим:

…     server {         listen 80;         server_name 78.110.63.

31;         location /server-status {             stub_status on;         }         location /status {             access_log off;             include fastcgi_params;             #fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;             fastcgi_pass 127.0.0.1:9000;             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;         }     }

* обратите внимание на закомментированную строку и строку под ней. В зависимости от того, как настроен php-fpm (слушает на порту или через сокетный файл) необходимо настроить nginx. В данном примере подразумевается, что php-fpm слушает на 9000 порту.

Открываем конфигурационный файл php-fpm:

vi /etc/php-fpm.d/www.conf

Снимаем комментарий со следующей строки:

Проверяем настройку nginx, перезапускаем его и php-fpm:

systemctl restart php-fpm

Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:

Долгие запросы

С помощью длительных запросов к веб-серверу или СУБД можно сделать выводы о том, что является узким местом в работе сервиса.

MySQL / MariDB

Для начала, воспользуемся инструкцией, чтобы настроить ведение лога медленных запросов (для MySQL или MariaDB).

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

PHP-FPM

Открываем конфигурационный файл:

vi /etc/php-fpm.d/www.conf

Редактируем следующие параметры:

request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log

request_slowlog_timeout определяет время, в течение которого должен выполняться запрос, чтобы он считался медленным; slowlog — путь до лога, куда будет сохранена информация о медленных запросах.

Перезапускаем сервис:

systemctl restart php-fpm

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

tail -f /var/log/php-fpm/www-slow.log

Источник: https://www.dmosk.ru/miniinstruktions.php?mini=web-load-analis

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

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

Аппаратная часть любого сервера состоит из 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 htopCPU[|| 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. Это количество свободной памяти. Очень важным показателем является 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 кэша.
Читайте также:  Восстановление windows спб. частный мастер

Запись

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

  • Убедитесь, что у Вас отключены все логи доступа и отладки. Например, access_log в 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 — загрузка сети

Самое важное

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

Источник: https://ruhighload.com/search?q=iotop

Быстрый анализ производительности Linux-сервера

Производительность — один из наиболее заметных параметров системы. Именно на её недостаток чаще всего жалуются пользователи. Ниже приведены некоторые элементарные способы по анализу производительности системы.

Часто ошибочно считает, что поднять скорость системы можно хорошо «оптимизировав» конфиги. Это редко бывает так. Оригинальные стоковые конфиги репозиторного софта подходят для решения многих задач.

Их можно (и нужно) менять для достижения задач конкретного проекта.

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

Прежде чем что-то пытаться менять в конфигурации необходимо найти проблемные (узкие) места в системе. В общем случае методика исследования следующая:

  • Собирайте и анализируйте статистические данные о работе системы. На минимальном уровне это решается различными системами мониторинга, например, munin, Zabbix. В более продвинутом случае — свои плагины к этим системам мониторинга или собственные скрипты. Если пару дней назад всё работало отлично, а сейчас какие-то «тормоза» — мониторинг поможет установить их источник. Кроме этого, мониторинг позволяет обнаружить еще не проявившиеся проблемы, когда используемые ресурсы системы исчерпываются.
  • Журналируйте собственные изменения конфигурации. И сравнивайте динамику производительности (по собранным статистическим данным) до включения новой конфигурации и после нее. Это поможет узнать, какие изменения действительно эффективны, а какие бесполезны или даже вредны. Также, журналирование позволит оперативно обнаружить медленный код в бизнес-приложениях.
  • Не перегружайте систему. На небольших нагрузках кажется, что ресурсов системы очень и очень достаточно впрок. Однако, это не так. Когда загрузка какого-либо из ключевых параметов системы подходит к 100% (это может быть, например, загрузка ЦП, или ввода-вывода или даже наличие свободного места на дисках), «тормоза» системы возрастают нелинейно. В том числе это происходит из-за «накладных расходов», т.е. ресурсов системы не расходуемых на определённые процессы, а теряемые в процессе работы ОС и переключения задач.

Процессорное время (CPU)

Load average легко собираются любым мониторингом круглосуточно и его необходимо анализировать. Максимальное значение LA (в часы наибольшей нагрузки) не должно превосходить возможностей системы, т.е. количества её ядер CPU. В противном случае неизбежно замедление работы приложений, причем с увеличением LA выше возможностей системы будут возрастать потери на переключении контекста.

Когда LA достаточно высок имеет смысл посмотреть на что именно расходуются ресурсы процессора. Простейший способ это сделать — посмотреть процессы с наибольшим процессорным временем (TIME) в выводе утилит top, htop или ps aux. Далее уже пытаться снизить нагрузку именно на этом звене.

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

В тех же top и htop следует обратить внимание на процессы в состоянии D, которое обычно соответствует ожиданию ввода-вывода процесса, а также на заполнение свопа. Но об этом ниже.

Коротко (для скриптов мониторинга) значение LA можно взять из параметров системы:

cat /proc/loadavg

Вручную — легче в top и htop.

Характеристики использования процессорного времени отображается также командой vmstat:

$ vmstat procs ————memory———- —swap— ——io—- -system— ——cpu—— r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 7596 329216 13260 14506756 0 0 4625 26 42 145 4 1 81 13 0

vmstatпринимает 2 аргумента: время в секундах, в течение которого необходимо наблюдать за системой, и количество генерируемых отчетов. Эту утилиту полезно запускать для наблюдения, например для формирования 10 отчетов по 1 минуте каждый:

vmstat 60 10

Колонки us (user) и sy (system) означают соответсвенно процессорное время затраченное на пользовательские процессы (демоны и прикладного ПО) и системное. Для большинства систем нормально, если время распределяется между ними поровну.

in (interrupts) и cs (context switches) это количества прерываний и переключений контекста, и оба эти параметра — накладные расходы системы и их не должно быть много.

Разбивку использования CPU по ядрам можно получить с помощью mpstat, например по всем ядрам

$ mpstat -P ALL Linux 3.2.0-4-amd64 (sys01) 01/05/15 _x86_64_ (16 CPU) 16:09:51 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 16:09:51 all 3.55 18.39 9.83 1.24 0.00 0.50 0.00 0.00 66.49 16:09:51 0 5.85 43.47 11.04 1.62 0.00 6.79 0.00 0.00 31.23 16:09:51 1 4.23 29.35 10.81 1.34 0.00 0.11 0.00 0.00 54.17 16:09:51 2 3.86 24.70 10.17 1.26 0.00 0.11 0.00 0.00 59.90 16:09:51 3 3.66 22.73 9.64 1.10 0.00 0.13 0.00 0.00 62.74 16:09:51 4 6.01 15.49 8.84 4.94 0.00 0.26 0.00 0.00 64.47 16:09:51 5 3.15 12.93 8.29 1.43 0.00 0.08 0.00 0.00 74.13 16:09:51 6 2.93 12.90 8.11 1.08 0.00 0.08 0.00 0.00 74.90 16:09:51 7 2.79 14.15 8.43 0.87 0.00 0.07 0.00 0.00 73.69 16:09:51 8 4.01 24.11 8.93 0.93 0.00 0.04 0.00 0.00 61.98 16:09:51 9 2.89 15.37 10.24 0.84 0.00 0.07 0.00 0.00 70.60 16:09:51 10 2.91 15.56 10.64 0.85 0.00 0.07 0.00 0.00 69.98 16:09:51 11 2.78 15.35 10.61 0.81 0.00 0.09 0.00 0.00 70.36 16:09:51 12 2.89 11.69 8.56 0.84 0.00 0.04 0.00 0.00 75.98 16:09:51 13 3.58 12.81 12.09 0.66 0.00 0.03 0.00 0.00 70.83 16:09:51 14 2.95 12.32 11.24 0.66 0.00 0.03 0.00 0.00 72.80 16:09:51 15 2.36 11.60 9.59 0.59 0.00 0.04 0.00 0.00 75.82

Выводимые параметры утилиты понимающему человеку там очевидны.

Оперативная память (RAM)

Использование оперативной памяти «на ходу» анализируется с помощью утилит htop, vmstat, free. Лучше — смотреть в динамике в мониторинге, том же мунине. Прежде всего необходимо обратить внимание на использование свопа, который в хорошей должен быть почти свободным и не увеличиваться/уменьшаться в определённое время суток.

В выводе

$ free -h total used free shared buffers cached Mem: 47G 44G 2.3G 0B 559M 26G -/+ buffers/cache: 18G 29G Swap: 15G 3.6G 12G

если окажется мало free-памяти, но много cached — это нормально. Память может быть занята страничным кэшем (cached), который многократно увеличивает скорость дисковых операций. Когда «свободной» (free) памяти действительно много это даже плохо и означает, что она не полностью используется. То же самое относится к выводу vmstat.

Ввод-вывод (IO, input-output)

Статистику по ввода-выводу системы лучше собирать пакетами мониторинга. Параметр системы, на который в первую очередь необходимо обратить внимание — iowait, т.е. ожидание ввода-вывода. Его подробные значения можно получить, например, с помощью mpstat:

mpstat -P ALL

Сводные значения есть также в top, vmstat.

Часто признаком наличия проблем с вводом-выводом является большое количество процессов в состоянии D (uninterruptible sleep), в которое процесс переходит при ожидании ввода-вывода. Это не обязательно означает, что дело именно в I/O, но такая ситуация в любом случае должна быть исследована.

Счетчики чтения-записи с дисковых устройств получаются по

$ vmstat -d disk- ————reads———— ————writes———— ——IO—— total merged sectors ms total merged sectors ms cur sec sda 90878564 7454833 2829423640 647949492 205895042 265140200 14858972810 2510368504 0 448274 sdb 455801809 14612605 57375867578 2021813576 434699644 365377967 109699014136 4291627964 0 2081456 sdd 94938371 343221533 57971885640 3782143884 34980046 34425685 8816083324 1994769084 0 449787 sdf 83996804 354254620 57971510608 1338153836 35203200 34649634 8822861163 2201253492 0 462982 sde 83274303 354838922 57968955195 1266856936 34793484 34477071 8818425628 2217294360 0 461751 sdc 112569402 325806501 57972989224 4284077532 35217039 34782607 8820518859 2068813212 0 446935 sr0 0 0 0 0 0 0 0 0 0 0 loop0 0 0 0 0 0 0 0 0 0 0 loop1 0 0 0 0 0 0 0 0 0 0 loop2 0 0 0 0 0 0 0 0 0 0 loop3 0 0 0 0 0 0 0 0 0 0 loop4 0 0 0 0 0 0 0 0 0 0 loop5 0 0 0 0 0 0 0 0 0 0 loop6 0 0 0 0 0 0 0 0 0 0 loop7 0 0 0 0 0 0 0 0 0 0 md0 289404098 0 44556083939 0 123718867 0 17627362527 0 0 0

Еще более удобная утилита для этого — iostat. Как и vmstat, она принимает 2 параметра (время наблюдения и количество отчетов). Полезно снять несколько расширенных отчетов за некоторый промежуток времени, например, минуту:

$ iostat -x 60 5 avg-cpu: %user %nice %system %iowait %steal %idle 7.83 47.27 21.99 1.52 0.00 21.39 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.50 42.87 7.70 40.28 37.27 1732.40 73.76 5.40 112.63 13.26 131.62 2.05 9.83 sdb 9.52 56.27 85.38 60.47 1459.00 5955.80 101.68 14.10 96.69 13.17 214.63 2.46 35.85 sdd 0.08 0.27 0.08 1.47 11.27 40.27 66.49 0.01 5.59 24.80 4.50 4.90 0.76 sdf 0.22 0.50 0.15 2.35 30.27 53.75 67.21 0.02 6.43 31.11 4.85 4.83 1.21 sde 0.17 0.45 0.15 2.28 24.47 44.45 56.64 0.01 4.77 11.11 4.35 3.12 0.76 sdc 0.17 0.32 0.73 1.53 25.47 49.57 66.21 0.02 8.44 12.91 6.30 4.68 1.06 md0 0.00 0.00 1.75 3.25 91.47 93.52 73.99 0.00 0.00 0.00 0.00 0.00 0.00

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

Сеть (Network)

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

Обязательно необходимо убедиться, что настройки скорости и дуплексного режима верны для сетевой карты. Это можно сделать (и изменить) с помощью утилит ethtool и mii-tool:

ethtool eth0

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

Читайте также:  Nginx + rtmp. трансляция видео с веб-сервера. установка и настройка nginx-rtmp-module

ethtool -s eth0 autoneg off speed 100 duplex full

Полезно посмотреть и другие параметры интерфейсов, грепнув их вывода ядра:

dmesg | grep -i eth

Пиковую загрузку сети лучше (как и многое остальное) мониторить постоянно и автоматически, например, тем же munin. Ориентироваться лучше на пиковую нагрузку — по ней должен быть определённый запас и в её время не должно быть больших значений iowait.

Хорошую статистику по сети и разбивку по типам траффика можно получать с помощью ntop.

Что делать

Многие убеждены, что производительность можно многократно поднять («оптимизировать») чисто софтовыми способами, т.е. изменением настроек операционной системы и прикладного софта. На деле это не всегда так.
Ядра современных дистрибутивов Linux уже хорошо настроены в плане производительности.

Если задача типовая и «железо» устраивает — менять ничего не нужно. Изменение каких-либо параметров через sysctl на большинстве серверных задач не повысит скорость работы, а при плохом подгоне даже понизит.

Тем более, следует скептически относиться ко всем интернет-советам по оптимизации (в том числе, описанным на этом сайте).

Какие-то параметры работы можно оптимизировать: настройками прикладного софта, перераспределением файловой системы.

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

При высокой нагрузке на I/O поможет использование RAID, программных (mdadm) или аппаратных.

На масштабирование «железа» и стоит в перспективе ориентироваться и не строить иллюзий по поводу софтовых оптимизаций.

Источник: https://unixmin.com/blog/quick-linux-performance-analysis

On-line журнал o Linux

Статья с хабра, я только немного подправил под Debian ( Ubuntu ).
В этой статье я опишу некоторые утилиты для одномоментного мониторинга нагрузкизагрузкииспользования в операционной системе Linux. Цель — увидеть, что именно сейчас происходит с системой.

Чаще, используется когда нужно найти проблему с производительностью или с неправильной работой системы. Для постоянного мониторинга и построения отчётов я использую zabbix. Тема скорей всего уже поднималось, но мне хочется видеть FAQ в одной статье.

Крайне приветствую в комментариях дополнения, команды, советы и выдержки из личного опыта.
Первое с чего начну, это всем известная утилита top. Она показывает общие сведения о процессоре, памяти и процессах, если возникают вопросы по производительности, я её запускаю первой, чтобы выявить аномалии в системе.

У утилиты top есть параметры, которые облегают жизнь, их мы набираем в top’e когда он запущен:

S — показать системные процессы, по умолчанию они не показываются
u — и имя пользователя, например u mysql покажет процессы запущенные от пользователя mysql
o — используем для сортировки, возможные параметры — pri, size, res, cpu, time, threads
m — переключение между режимами отображения нагрузки и ввода-вывода
k — завершить процесс, ввод pid процесса
r — изменить приоритет процесса, вводим pid процесса
n — отображать статистику по определённому процесс
a — показывает абсолютные запущенных процессов
top -n 3 — показывает самые ресурсоёмкие приложения в данный момент
gstat — показывает использование дисков. (для Debian ( Ubuntu )ставим:

$ apt-get install ganglia-monitor

gstat -a — используется для вывода только активных устройств
vmstat — показывает состояние виртуальной памяти и буфера.
vmstat 5 — отображает статистику раз в пять секунд
vmstat -z — показывает состояние буфера
vmstat -i — показывает состояние прерываний
iostat — выводит статистику по I/O усройств
(для Debian ( Ubuntu )ставим:$ apt-get install sysstat
iostat -d -w5 — показывать информацию по дискам, с периодичностью в пять секунд безостановочно
iostat -dx -w5 — показывает расширенную статистику
netstat — показывает активные сетевые соединения.
netstat -w 1 — количество пакетов в настоящее время.
netstat -ibt — вывод сетевых интерфейсов с разбивкой по IP адресам, отображает объём трафика, количество ошибок, коллизий.
netstat -rn — отображает таблицу маршрутизации
sysctl — позволяет посмотреть параметры в системы и внести изменения, такие как стек tcp/ip, вирутальной памяти.
sysctl -a — показывает все параметры
sysctl kern.ipc.numopensockets — показывает количество открытых сокетов
sysctl kern.openfiles — показывает количество открытых файлов Вообще-то в sysctl кладезь информации, и она достойна отдельной подробной статьи.

df — утилита, которая показывает свободное место на дисках.

df -h — отображает слайсы, и свободноезанятое место.
df -i — показывает количество занятых инодов.
sockstat — отображает информацию о сокетах, сетевых и файловых. (для Debian ( Ubuntu )ставим:

$ apt-get install sockstat

sockstat -l — список портов открытых на прослушивание
sockstat -c список установленных соединений
sockstat -4, -6 — по протоколу ipv4 или ipv6
lsof — показывает информацию от откртых сокетах, файлах и сетевых соединениях.
lsof -i -n — показывает открытые интернет-соединения
lsof -i -n |grep ESTABLISHED — показывает открытые, и установленные сетевые соединения
ps auxww|grep имяpid от кого запущено — позволяет получить информацию по интересующему процессу.
mount — показывает смонтированные разделы.
Также можно установить iftop, которая показывает статистику по сетевым интерфейсам, к при меру:
iftop -i em0
tunefs -p /tmp – показывает информацию о файловой системе.
uname -a — показывает информацию о системе, ядре.
date — выводит текущую дату и время.
w — показывает кто, откуда, во сколько зашёл в систему.
last — показывает историю входов в систему, и последнюю перезагрузку.
uptime — показывает сколько система работает с момента последней перезагрузки.

Читаем еще:

Источник: http://www.linuxjournal.su/monitoring-v-os-linux/

Системы мониторинга сервера Linux

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

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

Существует множество систем, которые позволяют отслеживать различные параметры системы и производительности. Такие системы позволяют собирать данные не только с одного сервера, но и с целых кластеров, а также представлять их в удобном для чтения виде.

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

Существуют как глобальные системы для отслеживания всех параметров, так и более специализированные, предназначенные для определенных сервисов, такие мы тоже рассмотрим.

1. Sarg

Sarg — это инструмент с открытым исходным кодом, который используется для мониторинга работы прокси сервера Squid. Он позволяет создавать отчеты об активности пользователей, просматривать IP адреса сайтов, которые они посещают, ссылки переходов, время, трафик и все другие параметры, доступные в логах Squid.

Особенности утилиты:

  • Свободная лицензия GPLv2;
  • Поддержка нескольких языков;
  • Работает под Linux и FreeBSD;
  • Выводит информацию в формате HTML;
  • Очень проста в установке и использовании.

2.  Monit

Monit — это целая платформа для мониторинга производительности сервера Linux или Unix. Вы можете контролировать все сервисы и параметры. Можно отслеживать состояние Apache, Nginx, размер различных кэшей и объем передаваемых данных и много других вещей.

Особенности Monit:

  • Свободный инструмент с открытым исходным кодом;
  • Доступ через веб-интерфейс или из командной строки;
  • Мониторинг всего программного обеспечения и сервисов;
  • Отображения графиков использования ОЗУ и нагрузки на процессор;
  • Поддерживается настройка автоматических действий в экстренных ситуациях.

3. Icinga

Это свободная система мониторинга серверов, основанная в 2009 году на исходном коде Nagios.

Здесь вы можете посмотреть подробную информацию о нагрузке на процессор, сетевых соединениях, устройствах и процессах.

Основное отличие от оригинала Nagios — это возможность сохранения данных мониторинга в базу данных MySQL, OracleSQL или Postgresql. Это отличный выбор для тех, кто ищет сетевую систему мониторинга.

Особенности Icinga:

  • Проект с открытым исходным кодом;
  • Можно отслеживать все параметры через сеть;
  • Поддержка MySQL и PostgreSQL;
  • Мониторинг в реальном времени с помощью веб-интерфейса;
  • Поддерживаются различные модули и расширения;
  • Поддерживает выполнение различных действий на сервере.

4. Observium

Observium — это инструмент для мониторинга сети, он был разработан для облегчения управления сетью серверов. Инструмент имеет две версии — полностью свободную версию для сообщества и коммерческую версию, подписка на которую стоит 150 $ в год.

Особенности:

  • Программа написана на PHP с поддержкой баз данных MySQL;
  • Имеет приятный веб-интерфейс для вывода информации;
  • Можно контролировать несколько серверов одновременно;
  • Есть бесплатная версия.

5.  PHP Server Monitoring

В отличие от других инструментов из этого списка, PHP Server Monitoring — это скрипт, написанный на PHP, который поможет вам управлять веб-сайтами и серверами достаточно просто. Здесь поддерживается экспорт данных в базу MySQL.

Особенности:

  • Хороший веб-интерфейс;
  • Возможность отправки уведомлений по электронной почте и SMS;
  • Современная система определения ошибок и отправки отчетов на электронную почту;
  • Поддержка работы с планировщиком Cron.

6. Linux Dash

Linux Dash — это веб-панель, которая показывает всю самую важную информацию про вашу систему Linux. Здесь отображаются такие параметры, как RAM, CPU, состояние файловой системы, запущенные процессы, пользователи и полосы пропускания в реальном времени. Система мониторинга Linux имеет приятный интерфейс и полностью бесплатна.

7. Cacti

Cacti — это свободный веб-интерфейс с открытым исходным кодом для инструмента RRDtool, он часто используется для мониторинга пропускной способности сети с помощью SNMP (Simple Network Management Protocol). Также панель можно использовать чтобы выполнять мониторинг linux серверов и использования памяти, а также нагрузки на процессор.

Особенности Cacti:

  • Свободный инструмент с открытым кодом;
  • Написанный на PHP и PQL;
  • Работает в Windows и Linux;
  • Управление пользователями.

8. Munin

Munin — это еще один графический интерфейс для RRDtool, он был написан на Perl и распространяется под лицензией GPL. Это отличный инструмент для мониторинга систем, приложений, сетей и сервисов.

Он работает на всех Unix подобных операционных системах и имеет множество плагинов. Доступно более 500 плагинов для мониторинга всего, что вы пожелаете.

Также можно отправлять уведомления администратору когда возникла ошибка и когда она была устранена.

9. Zabbix

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

10. Nagios

Это один из лучших инструментов с открытым исходников. Его разработка началась в 1996 в США. Основная часть инструмента — это ядро, которое содержит базовую функциональность.

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

При возникновении ошибок можно отправлять сообщения администратору.

11. Netdata

Netdata — это одна новая система мониторинга серверов Linux в реальном времени с очень красивым и современным интерфейсом в плоском стиле.

Как и другие системы мониторинга Linux здесь поддерживается отображения большинства важных параметров в реальном времени, таких как нагрузка на процессор, память, запущенные службы, операции ввода-вывода и другие параметры. Также возможности программы можно расширить с помощью плагинов.

Выводы

В этой статье мы рассмотрели системы мониторинга для linux, которые вы можете использовать в своих проектах. Конечно, это далеко не все решения, а только лучшие из них. Все программы доступны бесплатно или имеют бесплатную версию. А какие системы мониторинга используете вы для решения своих задач? Что-то было упущено в этом списке? Напишите в комментариях!

Читайте также:  На флешке не видно файлов, пропали файлы с флешки

(12

Источник: https://losst.ru/sistemy-monitoringa-servera-linux

Проверка нагрузки на web-сервер с ab для Linux и Unix

Хочу рассказать в теме «Проверка нагрузки на web-сервер с ab для Linux и Unix» как можно протестировать нагрузку на сервер.

Сделать можно это с утилитой Apache benchmark – это одна из самых простых утилит для тестирования нагрузки на сайты. Поставляется она вместе с веб сервером apache и не нуждается в настройке.

Основной задачей apache benchmark (ab)–  это показать каким количеством запросов можно «положить» веб-сервер и как быстро они выполняются.

Для того чтобы воспользоваться утилитой ab, нужно выполнить следующее:

# ab -c 10 -n 100  https://linux-notes.org/

Сейчас я поясню где и что, параметр «-с 10» – задает количество параллельных запросов, «-n 100» — это параметр который задает общее число запросов, а https://linux-notes.org/ – это мой сайт для тестирования.

Сайт для тестирования должен быть вводится в формате :
ab [options] [http[s]://]hostname[:port]/path

утилита ab с опиями

Все что выдаст можно увидеть у меня на рисунке ниже — это отчёт по нагрузке тестирующего сайта  с помощью утилиты Apache benchmark:

Отчет о проведенной работе утилиты ab

Как видно с рисунка, я использую макбук и тестирую свой сайт. УБЕДИТЕЛЬНАЯ ПРОСЬБА, НЕ ТЕСТИРУЙТЕ ПОЖАЛУЙСТА ДАННЫЙ САЙТ и не выводите его из работы.

Сейчас поговорим о параметрах которые особо важны:

  • Concurrency Level (количество одновременно-отправляемых запросов) — у меня их 10;
  • Time taken for tests (тысяча запросов к серверу ) заняла 103 секунды (полное время на тестирование);
  • Complete requests: успешно получены ответы (100) на всю тысячу запросов;
  • Failed requests (не выполненные запросы) — у меня их 0;
  • Write errors (ошибки записи) — у меня их 0;
  • Total transferred (суммарный объем переданных данных) 8856700 байт;
  • HTML transferred (из них «нужного» HTML) — 8800300 байт;
  • Requests per second [#/sec] (mean)- это среднее количество запросов в секунду и заняло у меня 0.91 сек
  • Time per request: 602.307 [ms] (mean) – втечении этого времени выполнились 10 параллельных запросов
  • Time per request: 60.231 [ms] (mean, across all concurrent requests) – среднее время выполнения одного запроса
  • Transfer rate: это скорость обмена данными с сервером и составила 79.2 кБ за секунду.
  • Percentage of the requests served within a certain time (ms) – доля запросов на единицу времени. Тут видно, что 50% запросов выполнились менеее чем за пол секунды, а самый долгий запрос выполнялся 2 секунды(100% 2044 ms).

Изменяя параметры -n и -c можно отслеживать поведение сервера под нагрузкой.

Параметры ab

  • -c — С данной опцией можно определить количество параллельных запросов.
  • -n —С данной опцией можно определять количество отправляемых запросов на сайт.
  • -t —С данной опцией можно задавать максимальное количество секунд.
  • -C cookie-name=value —С данной опцией можно добавлять cookie в каждый запросу.
  • -H — С данной опцией можно задававть заголовок для запроса.
  • -T —С данной опцией можно задать Content-type.
  • -p —С данной опцией можно задавать файл содержащий тело POST запроса.

Вот и все, моя статья «Проверка нагрузки на web-сервер с ab для Linux и Unix» подошла к завершению.

Источник: https://linux-notes.org/proverka-nagruzki-na-web-server-s-ab-dlya-linux-i-unix/

Мониторинг нагрузки на сервер утилитой atop

Самой удобной утилитой мониторинга нагрузки на сервере, на мой взгляд, является atop. Огромным плюсом данной утилиты является постоянное ведение логов нагрузки на сервер, это удобно т.

к проблемы обычно происходят когда мы не следим за сервером прямо сейчас. А с atop можно отмотать «время назад» и посмотреть нагрузку на сервер в момент проблемы. Данная утилита есть во всех дистрибутивах линукс, также она присутствует во FreeBSD.

Рассмотрим установку утилиты для Ubuntu/Debian, Cenos и FreeBSD.

Ubuntu/Debian:

# apt-get install atop -y

Centos:

# yum install atop -y

FreeBSD:
Определяем местонахождение порта:

# whereis atop atop: /usr/ports/sysutils/atop

Переходим в каталог

# cd /usr/ports/sysutils/atop

И устанавливаем порт

# make install clean

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

# atop

После запуска мы увидим окно типа такого:

Дожидаемся когда посередине исчезнет надпись

*** system and process activity since boot ***

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

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

m — сортировать по занимаемой памяти d — сортировать по создаваемой нагрузке на диск u — покажет таблицу нагрузки по пользователям v — покажет подробную информацию по процессам g — вернет вывод по умолчанию n — сортировать процессы по нагрузке на сеть(доступно только с установленным патчем ядра)

Теперь разберёмся как смотреть логи atop. Тут все достаточно просто. Для просмотра лога за текущий день достаточно выполнить

# atop -r

Мы увидим обычное окно atop, как и при просмотре в реальном времени, только по состоянию на 00 часов 00 минут текущего дня. Время можно увидеть в верхней строке. Переместится вперед по времени можно с помощью клавиши t.

Назад с помощью shift+t.
Сразу перейти на нужное время можно нажав -b, и в появившемся диалоге ввести нужное время.
Также хранятся логи нагрузки за предыдущие дни. В Ubuntu 14.04 они лежат в каталоге /var/log/atop/.

Открыть можно примерно так.

# atop -r /var/log/atop/atop_20140915

Цифры в названии файла обозначают дату в формате ГГГГММДД.

Источник: https://anikin.pw/all/monitoring-nagruzki-na-server

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

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

В центре нашего внимания будут нагрузки, связанные с использованием центрального процессора и жесткого диска.

Постараемся ответить на вопрос: что делать в случае проблем на сервере, какие инструменты использовать и на что обращать внимание для диагностирования проблем производительности в операционной системе Linux.

Команда top

Главным инструментом в этом деле станет команда top. Результат её выполнения выглядит так:

Программа top выдает динамическое представление о работающей системе в реальном времени. Верхнюю часть вывода занимает краткая обобщённая информация, нижнюю часть — список запущенных процессов.

Рассмотрим основные показатели, которые могут нас заинтересовать.

Средняя нагрузка на систему (load average)

Load Average — среднее значение загруженности системы за период времени (в дальнейшем LA). Три значения показывают усреднённую нагрузку за последние 1, 5 и 15 минут. LA является одним из самых спорных показателей.

Можно найти множество противоречивых статей, какое значение считать нормальным. Обычно принимается, что значение 0 это простой ядра, а значение 1 это полная нагрузка ядра. Оценить показатель средней нагрузки можно только зная количество ядер в системе.

Узнать сколько ядер доступно можно командой:

dmidecode -t processor | grep «Core Enabled:»
Core Enabled: 6
Core Enabled: 6

Видим, что на данной системе находится 12 физических ядер (6+6). Соответственно, нормальный показатель LA должен быть менее 12. Однако, на процессорах Intel используется технология Hyper-Threading, которая делит одно физическое ядро на два логических.

dmidecode -t processor | grep «Thread Count:»
Thread Count: 12
Thread Count: 12

Соответственно, в данном случае в системе может быть одновременно 24 виртуальных процессора (потока).

Технология Turbo Boost позволяет процессору «разгоняться» и работать на частоте выше заявленной (т.е. выше 100%, выше единицы). Какой показатель LA считать нормальным в данном случае является предметом споров.

Были попытки вычислить нормальное значение LA эмпирическим путем. Но мы считаем это бессмысленным занятием.

Дело в том, что в LA попадают также процессы, стоящие в очереди чтения/записи и не имеющие отношение к процессору, а также процессы с приоритетом, измененным с помощью команды nice.

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

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

Параметр Cpu

Строка Cpu показывает сразу несколько параметров нагрузки:

us (user) Использование процессора пользовательским процессами
sy (system) Использование процессора системным процессами
ni (nice) Использование процессора процессами с измененным приоритетом с помощью команды nice
id (idle) Простой процессора. Можно сказать, что это свободные ресурсы
wa (IO-wait) Говорит о простое, связанным с вводом/выводом
hi (hardware interrupts) Показывает сколько процессорного времени было потрачено на обслуживание аппаратного прерывания
si (software interrupts) Показывает сколько процессорного времени было потрачено на обслуживание софтверного прерывания
st (stolen by the hypervisor) Показывает сколько процессорного времени было «украдено» гипервизором

Не будем углубляться в анализ значений hi и si в этой статье, поскольку проблемы с прерываниями встречаются очень редко. Скажем только, что наиболее вероятная причина высоких значений данных параметров — проблема с кодом, ядром или DDoS-атака.

Рассмотрим подробнее остальные параметры Сpu.

Нагрузка на процессор (параметры sy, us, ni)

Высокие значения sy, us и ni самые понятные и простые для диагностики, поскольку показывают нагрузку на CPU, создаваемую запущенными программами. Смотрим в выводе команды top процессы по столбцу %CPU и оптимизируем их при необходимости. Либо просто добавляем мощность CPU на сервер.

Однако надо учитывать, что однопоточные процессы будут выполнятся только на одном ядре. В этом случае даже при невысоком общем us могут наблюдаться проблемы.

Также нужно добавить, что высокое значение ni не всегда будет отрицательно влиять на работоспособность сервера. Возможно, приоритет процессов был понижен специально, чтобы они выполнялись только в том случае, когда процессор будет свободен. Данные процессы не оказывают влияния на работу системы. Например, это могут быть процессы создания бекапов.

Пример диагностики проблем при высоком us и sy

На сервере top показывает следующие значения:

CPU: 21.0% user, 0.0% nice, 74.6% system, 0.0% interrupt, 4.4% idle PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
95383 mysql 37 4 0 227M 74388K sbwait 1 0:00 49.80% mysqld
96904 qhost 1 97 0 171M 31884K CPU1 1 0:04 7.08% httpd
97360 frekbok 1 97 0 185M 42464K RUN 0 0:02 7.08% httpd
97442 frekbok 1 97 0 178M 37196K RUN 2 0:01 5.18% httpd
97423 frekbok 1 -4 0 178M 37160K RUN 1 0:01 4.79% httpd
97439 frekbok 1 97 0 178M 37052K RUN 2 0:01 4.79% httpd
97411 frekbok 1 -4 0 178M 37148K RUN 3 0:01 4.69% httpd
97418 frekbok 1 97 0 178M 37168K RUN 0 0:01 4.59% httpd
97444 frekbok 1 -4 0 178M 37192K RUN 1 0:01 4.59% httpd
97416 frekbok 1 -4 0 178M 37052K RUN 2 0:01 4.49% httpd
97421 frekbok 1 -4 0 178M 37060K CPU0 0 0:01 4.39% httpd
97424 frekbok 1 97 0 178M 37304K RUN 2 0:01 4.30% httpd

При этом LA больше 100.

Явно видно, что проблемы в нехватке CPU для работы mysql, и в большом количестве http-соединений пользователя frekbok.

Заходим к пользователю frekbok и смотрим лог apache. Там видим такие  POST-запросы, и множество им подобных:

Источник: https://FirstVDS.ru/technology/nagruzka-na-server-opredelenie-prichin

Ссылка на основную публикацию