Я играю с уровнем бесплатного пользования 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 без какой-либо обработки связанного содержимого, сеансов, соблюдения заголовков управления кешем и так далее.
Так что взгляните на следующие альтернативы:
Проверять, выписываться Инструменты нагрузочного тестирования с открытым исходным кодом: какие из них лучше использовать? статья для получения дополнительной информации о вышеупомянутых инструментах, включая образцы скриптов, отчеты и матрицу сравнения функций.
Также обязательно отслеживайте показатели работоспособности операционной системы, включая, помимо прочего:
Вы можете использовать либо встроенный Программы мониторинга Linux или Amazon CloudWatch или Плагин JMeter PerfMon, таким образом вы сможете определить, вызвано ли снижение производительности нехваткой ресурсов.
И последнее, но не менее важное: конфигурация nginx по умолчанию подходит для разработки и отладки, когда дело доходит до высоких нагрузок, вам нужно выполнить некоторые дополнительная конфигурация.