Назад | Перейти на главную страницу

Выявление узкого места веб-сервера на хосте nginx php t2.micro?

Я играю с уровнем бесплатного пользования AWS, используя экземпляр t2.micro. Я сделал простой сайт на php с elasticbeanstalk с apache и php7.1. Я использовал утилиту нагрузочного теста apache ab для отправки 1000 одновременных запросов на простую страницу helloworld.php. Средняя задержка составила 6,5 секунды. 99% запросов были быстрее 13,5 секунд. Затем я перехожу на использование nginx с php 7.1 fpm. Результаты аналогичны: в среднем 7,5 секунд, 14 секунд p99.

ЦП не поднимается выше нескольких процентов, а память не исчерпана. Может быть, задержка ввода-вывода в сети? Я не знаю, как это измерить. Какие-нибудь советы по выявлению узкого места? Ничего не выделяется, глядя на графики метрики htop или ec2 во время нагрузочного теста.

Пример вывода нагрузочного теста:

ab -k -n 1000 -c 1000 -H "Accept-Encoding: gzip, deflate" -g ab_out.dat http://example.com/public_html/api/test.html

Document Path:          /public_html/api/test.html
Document Length:        32 bytes

Concurrency Level:      1000
Time taken for tests:   16.252 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    1000
Total transferred:      284000 bytes
HTML transferred:       32000 bytes
Requests per second:    61.53 [#/sec] (mean)
Time per request:       16251.548 [ms] (mean)
Time per request:       16.252 [ms] (mean, across all concurrent requests)
Transfer rate:          17.07 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  449 339.8    427    1038
Processing:  1037 4113 2784.5   3258   15493
Waiting:     1037 4113 2784.5   3258   15493
Total:       1196 4562 2903.3   3540   16184

Percentage of the requests served within a certain time (ms)
  50%   3540
  66%   4950
  75%   5740
  80%   6591
  90%   9252
  95%  11355
  98%  12383
  99%  12518
 100%  16184 (longest request)

редактировать, больше точек данных:

У меня такая же задержка при обращении к пустому html-файлу. Задержка становится намного более разумной, когда я уменьшаю параметры ab -n и -c с 1000 до 100. Тем не менее, мне все еще интересно выяснить, почему запросы становятся намного медленнее по мере того, как я перехожу с 100 до 1000 одновременных запросов.

100 запросов раз:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       54  128  41.2    131     198
Processing:   169  376 126.4    374     592
Waiting:      169  376 126.5    374     591
Total:        223  504 167.6    505     790

Я бы порекомендовал рассмотреть более продвинутый инструмент нагрузочного тестирования, который может увеличить нагрузку. постепенно, таким образом вы сможете соотносить увеличение нагрузки с увеличением времени отклика и снижением пропускной способности. Кроме того, обработка одной страницы не имеет ничего общего с реальным сценарием, поскольку и nginx, и эластичный beanstalk могут кэшировать ответ.

Нагрузочный тест с правильным поведением должен максимально точно отражать действия конечного пользователя, включая файлы cookie, заголовки, кеш, обработку встроенных ресурсов (изображения, скрипты, шрифты, стили), вызовы JavaScript и т. Д., Что не относится к инструменту ab. поскольку он загружает только основной ответ HTML без какой-либо обработки связанного содержимого, сеансов, соблюдения заголовков управления кешем и так далее.

Так что взгляните на следующие альтернативы:

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

Также обязательно отслеживайте показатели работоспособности операционной системы, включая, помимо прочего:

  • ЦПУ
  • ОЗУ
  • Сеть IO
  • Диск IO
  • Использование файла подкачки

Вы можете использовать либо встроенный Программы мониторинга Linux или Amazon CloudWatch или Плагин JMeter PerfMon, таким образом вы сможете определить, вызвано ли снижение производительности нехваткой ресурсов.

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