El servidor OpenLiteSpeed ​​en EC2 se agota en un sitio de comercio electrónico pequeño

El servidor OpenLiteSpeed ​​en EC2 se agota en un sitio de comercio electrónico pequeño

Espero que estés bien: estoy ejecutando un sitio de Wordpress con Woocommerce en un servidor web OpenLiteSpeed ​​que, bajo un uso intensivo de PHP, comienza a mostrar errores 504 de tiempo de espera agotado. Estoy alojando todo en AWS y estoy luchando por identificar las causas de los errores 504 y qué se podría mejorar para evitarlos. Aquí hay algunos detalles:

Configuración de AWS:

  • El servidor web está instalado en una instancia t3.medium con Ubuntu 20.04 amd64 y 50 Gb de almacenamiento EBS (optimización de E/S habilitada). Actualmente se utilizan unos 10 Gb.
  • Ejecutando PHP 7.4 y
  • Estoy usando dos distribuciones de CloudFront para CDN: una para imágenes del servidor (en S3) y la otra para archivos CSS/JS del servidor.
  • Tengo un ELB para administrar el tráfico al servidor web. El tiempo de inactividad está establecido en 300 segundos.
  • Tengo una instancia de RDS db.t3.small (100 Gb gp2) que ejecuta Mariadb 10.5.13, el tamaño de la base de datos es de aproximadamente 1,5 g Gb.
  • Estoy usando Redis ElastiCache con tres nodos cache.t3.micro.

Estadísticas del sitio:

  • El sitio tiene ~1000 visitas por semana.
  • Alrededor de 350 páginas de productos y 50 páginas.
  • El tamaño de la página oscila entre 500 kb y 13,5 Mb.

¿Cuál es el problema?

  • El sitio se está agotando y arroja errores 504 cuando usa funciones PHP pesadas, como cargar productos (y adjuntarles imágenes), cargar imágenes, vaciar el caché OLS varias veces (alrededor de 3 a 4) en un pequeño lapso de tiempo o navegar a través de el sitio abre un montón de páginas de productos y las agrega al carrito.
  • La utilización de CPU de EC2 muestra picos máximos del 99 %, pero el ancho de banda de la red parece estar bien alcanzando picos máximos de 2,0 Gb y los créditos de CPU se mantienen estables.
  • Las conexiones de base de datos alcanzan un máximo de 50 por minuto y la utilización de la CPU fluctúa entre el 20% y el 30%.
  • El crédito explosivo se mantiene estable.
  • stderr.log muestra mucho "Se alcanzó el límite máximo de procesos de niños: 35, extra: 0, actual: 35, ocupado: 35, aumente LSAPI_CHILDREN".

Capturas de pantalla (instancia EC2):

% de utilización de CPU

Entrada neta+Salida neta

Saldo de créditos de CPU

Lo que probé hasta ahora:

  • Intenté aumentar el número máximo de conexiones y procesos secundarios a 350, pero el problema del tiempo de espera persiste.
  • Aumenté el límite de memoria de php.ini a 512 MB, pero no hice ninguna diferencia.
  • Intenté aumentar el almacenamiento de base de datos de 30 Gb a 100 Gb, pero no tuve suerte.
  • Intenté aumentar el almacenamiento de la instancia EC2 de 30 Gb a 50 Gb, pero nuevamente no tuve suerte.

Preguntas/Ayuda necesaria:

  • Según mi configuración, ¿qué métricas (y su agregación) debo buscar para identificar las causas fundamentales del tiempo de espera? AWS tiene tanta información que no sé qué podría realmente mover la aguja.
  • ¿Debo ampliar mi instancia EC2 para permitir más potencia de CPU? ¿O debería ampliar mi instancia RDS? o ninguno? Tengo un presupuesto limitado, por lo que esta opción no es realmente factible.
  • ¿Hay alguna configuración en el servidor web que pueda probar? Podría subir mi archivo de configuración si eso ayuda.
  • ¿Debería trasladar todo a un alojamiento administrado y vivir feliz para siempre?

gracias de antemano

información relacionada