
Надеюсь, у вас все хорошо - я управляю сайтом Wordpress с Woocommerce на веб-сервере OpenLiteSpeed, который при интенсивном использовании PHP начинает выдавать ошибки Timed-out 504. Я размещаю все в AWS и пытаюсь определить причины ошибок 504 и что можно улучшить, чтобы их избежать. Вот некоторые подробности:
Настройка AWS:
- Веб-сервер установлен в экземпляре t3.medium с Ubuntu 20.04 amd64 и 50Gb хранилища EBS (оптимизация ввода-вывода включена). На данный момент используется около 10Gb.
- Запуск PHP 7.4 и
- Я использую два дистрибутива CloudFront для CDN: один для сервера изображений (в S3), а другой для сервера файлов CSS/JS.
- У меня есть ELB для управления трафиком на веб-сервере, время простоя установлено на 300 секунд.
- У меня есть экземпляр RDS db.t3.small (100Gb gp2) под управлением Mariadb 10.5.13, размер базы данных составляет около 1,5gGb.
- Я использую 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):
Что я уже попробовал:
- Я попробовал увеличить максимальное количество подключений и дочерних процессов до 350, но проблема с тайм-аутом осталась.
- Я увеличил лимит памяти php.ini до 512 МБ, но это ничего не изменило.
- Пробовал увеличить объем хранилища БД с 30 ГБ до 100 ГБ, но безуспешно.
- Попробовал увеличить хранилище экземпляра EC2 с 30 ГБ до 50 ГБ, но снова безуспешно.
Вопросы/Нужна помощь:
- На основе моих настроек, какие метрики (и их агрегацию) мне следует искать, чтобы точно определить основные причины превышения времени ожидания? У AWS так много информации, что я не знаю, что на самом деле может сдвинуть ситуацию с мертвой точки.
- Стоит ли мне масштабировать мой экземпляр EC2, чтобы обеспечить большую мощность ЦП? Стоит ли мне масштабировать мой экземпляр RDS? Или нет? Я ограничен в бюджете, поэтому этот вариант не совсем осуществим.
- Есть ли какая-то конфигурация на веб-сервере, которую я мог бы попробовать? Я могу загрузить свой файл conf, если это поможет.
- Стоит ли мне просто перенести все на управляемый хостинг и жить долго и счастливо?
заранее спасибо