Рейтинг:0

Время ожидания сервера OpenLiteSpeed ​​на EC2 на небольшом сайте электронной коммерции

флаг ph

Надеюсь, у вас все хорошо — я запускаю сайт Wordpress с Woocommerce на веб-сервере OpenLiteSpeed, который при интенсивном использовании PHP начинает показывать ошибки Timed-out 504.Я размещаю все в AWS и изо всех сил пытаюсь определить причины ошибок 504 и то, что можно улучшить, чтобы их избежать. Вот некоторые детали:

Настройка АВС:

  • Веб-сервер установлен в экземпляре t3.medium с Ubuntu 20.04 amd64 и 50 ГБ хранилища EBS (включена оптимизация ввода-вывода). На данный момент используется около 10Gb.
  • Запуск PHP 7.4 и
  • Я использую два дистрибутива CloudFront для CDN: один для серверных изображений (в S3), а другой — для серверных файлов CSS/JS.
  • У меня есть ELB для управления трафиком к веб-серверу, время простоя установлено на 300 секунд.
  • У меня есть экземпляр RDS db.t3.small (100Gb gp2), работающий под управлением Mariadb 10.5.13, размер базы данных составляет около 1,5Gb.
  • Я использую Redis ElastiCache с тремя узлами cache.t3.micro.

Статистика сайта:

  • Сайт имеет ~ 1000 посещений в неделю.
  • Около 350 страниц продуктов и 50 страниц.
  • Размер страницы варьируется от 500 КБ до 13,5 МБ.

В чем проблема?

  • Сайт выдает ошибку 504 при использовании тяжелых функций PHP, таких как загрузка продуктов (и прикрепление к ним изображений), загрузка изображений, многократная очистка кеша OLS (около 3-4) за небольшой промежуток времени или навигация по сайт открывает кучу страниц товаров и добавляет их в корзину.
  • EC2 CPUUtilization показывает максимальные пики на уровне 99%, но пропускная способность сети кажется нормальной, достигая максимальных пиков на уровне 2,0 Гб, а кредиты ЦП остаются стабильными.
  • Максимальное количество подключений к базе данных составляет 50 в минуту, а загрузка ЦП колеблется от 20% до 30%.
  • Взрыв кредита остается стабильным.
  • stderr.log показывает много «Достигнуто максимальное ограничение дочерних процессов: 35, дополнительных: 0, текущих: 35, занятых: 35, пожалуйста, увеличьте LSAPI_CHILDREN».

Скриншоты (экземпляр EC2):

CPUUtilization%

NetIn+NetOut

Баланс кредитов ЦП

Что я пробовал до сих пор:

  • Я попытался увеличить максимальное количество подключений и дочерних процессов до 350, но проблема с тайм-аутом осталась.
  • Я увеличил лимит памяти php.ini до 512 МБ, но это не имело никакого значения.
  • Пробовал увеличить хранилище БД с 30Гб до 100Гб, безуспешно.
  • Попытался увеличить объем хранилища экземпляра EC2 с 30 Гб до 50 Гб, но снова безуспешно.

Нужны вопросы/помощь:

  • Основываясь на моей настройке, какие показатели (и их совокупность) мне следует искать, чтобы точно определить основные причины тайм-аута? У AWS так много информации, что я не понимаю, что на самом деле может сдвинуть с места.
  • Должен ли я масштабировать свой инстанс EC2, чтобы увеличить мощность ЦП? 0r должен ли я масштабировать свой экземпляр RDS? или нет? У меня ограниченный бюджет, поэтому этот вариант не осуществим.
  • Есть ли какая-либо конфигурация на веб-сервере, которую я мог бы попробовать? Я мог бы загрузить свой файл конфигурации, если это поможет.
  • Должен ли я просто перенести все на управляемый хостинг и жить долго и счастливо?

заранее спасибо

флаг jp
Для сервера с 2 ЦП и 4 ГБ ОЗУ очистка кеша не должна вызывать проблему тайм-аута PHP. Возможно, вы можете отправить заявку на [email protected] для получения дополнительной помощи.
Tim avatar
флаг gp
Tim
1000 обращений в неделю — это один запрос каждые _десять минут_, который простаивает, у вас есть огромное количество оборудования для этой крошечной нагрузки. Или у вас нагрузка больше? Как вы используете 2 ГБ в минуту, это 86 ТБ в месяц, что МАССИВНО для 1000 обращений в час. Ваш ЦП не должен быть загружен на 100%, смотрите на это как на свою основную проблему — используйте «верхнюю» утилиту Linux в качестве отправной точки. У вашего экземпляра не будет кредитов ЦП из-за того, что ЦП привязан к 100%, работая на базовом уровне, который составляет 20% ядра, что может вызвать тайм-ауты PHP. Я думаю, вам нужно пересмотреть свой вопрос на предмет точности.
флаг ph
@ Эрик спасибо, сделаю.
флаг ph
@Tim спасибо за ваш вклад. Я отредактировал свой вопрос, чтобы уточнить, что я имел в виду максимальные пики, а не среднее значение в минуту, кредиты ЦП не изменились. Я добавил ссылки на графики CPUUtilization, NetIn+NetOut и кредитного баланса ЦП для экземпляра.
Tim avatar
флаг gp
Tim
Так-то лучше. Вы уверены, что это только 1000 запросов страниц в неделю? Это очень мало для такой загрузки процессора. Включите журналы доступа/ошибок PHP и воспроизведите проблему. Отредактируйте свой вопрос, включив в него журнал доступа к веб-серверу, журнал доступа/ошибок PHP и журнал ошибок веб-сервера для этого отдельного запроса. В идеале сделайте это для нескольких разных запросов. Я подозреваю, что проблема в PHP, который очень требователен к процессору, но уровень вашего процессора в порядке, и кредиты процессора хороши.
Tim avatar
флаг gp
Tim
Другой возможный диагностический шаг — остановить ваш экземпляр, изменить его на большой тип экземпляра на 15 минут (m5.4xlarge или что-то подобное), попытаться воспроизвести проблему, остановить его и изменить обратно. Еще лучше сделать это со вторым экземпляром, восстановленным из моментального снимка, чтобы ваш сайт не вышел из строя, если вы можете им управлять, и используйте точечный экземпляр для снижения затрат.

Ответить или комментировать

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