Reduzca la carga del sistema cuando utilice el procesamiento de imágenes a través de php-fpm/nginx

Reduzca la carga del sistema cuando utilice el procesamiento de imágenes a través de php-fpm/nginx

Tenemos una API de imágenes PHP escrita en Code Igniter que se basa en imagemagic. Tenemos la API detrás de nginx/php-fpm. Sabemos que la parte de Imagemagic es pesada, pero intentamos que el rendimiento general sea cada vez mayor.

Hemos repasado más de 30 artículos de optimización sobre Nginx. Pudimos aumentar la producción de 300 solicitudes/minuto a 350 solicitudes/minuto siguiendo principalmente los artículos y realizando optimizaciones de TCP.

Con esto afectamos seriamente el tiempo de carga del servidor. No puedo decirles que no hay una carga promedio, ya que este es un cuadro nuevo y está basado en Nginx. En el pasado tuvimos trabajadores de Apache (menos de 300 solicitudes/minuto). Ahora con 350req/m tenemos una carga AVG de 20. Lo cual es demasiado y estamos buscando mejorar.

Cuando usamos htop para investigar los procesos, normalmente vemos alrededor de 20 procesos de php-fpm que utilizan en gran medida las 16 CPU, y la memoria ronda los 2 GB de 24 GB.

Nuestro objetivo es reducir drásticamente la carga del sistema. Me gustaría que los usuarios experimentados compartieran sus conocimientos sobre dónde buscar y qué probar. Publicaré los números que solicites, pero no quería completar la publicación con eso al principio.

¿Cómo procedería para reducir la carga del sistema pero manteniendo el rendimiento?

Respuesta1

Dado que hemos establecido que se trata de un problema puro de consumo de CPU (sin iowait), realmente no veo ninguna forma de mantener el mismo rendimiento sin agregar más recursos. Reduzca el número máximo de procesos PHP o agregue más núcleos de CPU.

O hacer que los desarrolladores utilicen algo más que ImageMagick.

Respuesta2

Si tiene solicitudes repetidas, puede verificar el caché fastcgi (http://wiki.nginx.org/HttpFastcgiModule) o usar barniz delante de nginx.

Esto le permitirá almacenar en caché las imágenes procesadas y no tener que volver a realizar procesos pesados ​​​​de la CPU.

Respuesta3

Dado que su pregunta indica que los procesos PHP-FPM están en la CPU SUPERIOR, imagino que está utilizando bibliotecas PHP ImageMagick (http://php.net/imagick).

Pídale a su(s) desarrollador(es) que pruebe(n) el escenario donde el procesamiento de la imagen se realiza directamente mediante el binario ImageMagick (por ejemplo, /usr/bin/[compare, import, display...].

Si usar directamente el binario funciona, use la función php exec() y encapsule la llamada a los binarios de ImageMagick, y vea cómo va (en términos de CPU y duración).

@información adicional:https://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

Respuesta4

Maneras de los desarrolladores

  1. Intente disminuir la sobrecarga de PHP para el procesamiento de imágenes.
  2. Intente utilizar menos recursos para el procesamiento de imágenes. Utilice imágenes preparadas o cambie algunas operaciones con menos requisitos de rendimiento

Modo administrador

  1. utilizar CPU más potentes

información relacionada