|
|||||||
Анализ нагрузки на веб-сервер Linux
Время создания: 22.01.2019 11:29
Автор: alensav
Текстовые метки: Анализ, нагрузки, веб-сервер, Linux, nginx, Apache, PHP-FPM
Раздел: MyTetra - Ubuntu_Command
Запись: alensav/MyTetra2/main/base/154814575144imqniqxe/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Анализ нагрузки на веб-сервер Linux Тематические термины: веб-сервер, nginx, Apache, PHP-FPM. В данной статье пойдет речь о мониторинге нагрузки, именно, в контексте веб-сервера. Мы не будем особо заострять внимание на проверке производительности системы, как, например, командами top, htop, free и так далее. Общая нагрузка на сервер Что грузит систему Использование lsof Анализ логов ошибок Статистика Apache NGINX + PHP-FPM Анализ медленных запросов MySQL / MariaDB PHP-FPM Нагрузка на сервер Проверить, нагружен ли сервер, а также понять, какой именно процесс больше всего потребляет ресурсов можно с помощью команд: top htop atop * по сути, все 3 вышеперечисленные команды выдают одну и туже информацию в разном виде. Какой-то из них может оказаться удобнее пользоваться. Утилита top встроена в систему, для использования остальных необходимо установить одноименные пакеты. Для определения объема свободной и занимаемой памяти можно воспользоваться командой: free * предыдущие команды тоже показывали утилизацию памяти, но кому-то команда free может показаться нагляднее. Для определения нагрузки на дисковую систему, используем следующую команду: iotop * по умолчанию, утилита не установлена в системе. Необходимо инсталлировать одноименный пакет. Что грузит систему Даже, если мы увидим, что на веб-сервере заканчивается оперативная память или загружен процессор, мы не сможем найти источник проблемы, которым, чаще всего, является некорректно работающий скрипт. Поэтому, определяем, какой файл на сервере вызывает нагрузку. Использование lsof lsof — утилита командной строки, которая отображает какие файлы используются процессами. Она позволит определить, к каким скриптам идет обращение со стороны веб-сервера. Для начала, необходимо установить lsof. В CentOS / Red Hat: yum install lsof В Ubuntu / Debian: apt-get install lsof Теперь можно выполнить следующие команды: lsof -c httpd lsof -c php-fpm * первая команда покажет, к каким файлам обращается 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 <VirtualHost *:80> servername 111.111.111.111 <Location /server-status> Sethandler server-status </Location> </VirtualHost> <Location /server-status> SetHandler server-status </Location> * где 111.111.111.111 — IP-адрес нашего веб-сервера; 80 — порт, на котором слушает apache. * в данном примере мы прописали два варианта просмотра статистики: первый — обращение в браузере к серверу по IP-адресу + /server-status; второй — обращение к любому сайту + /server-status. Разные способы оправданы для разных настроек самих сайтов и используемых CMS. Проверим корректность внесенных данных и перезапустим веб-сервер apache: apachectl configtest 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: vi /etc/nginx/nginx.conf В секцию http добавляем: ... server { listen 80; server_name 111.111.111.111; location /server-status { stub_status on; } } ... * где 111.111.111.111 — IP-адрес нашего веб-сервера. Проверяем корректность настройки и перезапускаем nginx: nginx -t systemctl restart nginx Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера: Теперь настроим статистику для php-fpm. В конфигурационном файле nginx в нашу директиву server добавим: vi /etc/nginx/nginx.conf ... 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 Снимаем комментарий со следующей строки: pm.status_path = /status Проверяем настройку nginx, перезапускаем его и php-fpm: nginx -t systemctl restart nginx 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 |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|