Reduza a carga do sistema ao usar processamento de imagem via php-fpm/nginx

Reduza a carga do sistema ao usar processamento de imagem via php-fpm/nginx

Temos uma API de imagem PHP escrita em Code Igniter baseada em imagemagic. Temos a API por trás do nginx/php-fpm. Sabemos que a parte do Imagemagic é pesada, mas tentamos aumentar o rendimento geral cada vez mais.

Já revisamos mais de 30 artigos de otimização sobre o Nginx. Conseguimos aumentar a produção de 300 solicitações/minuto para 350 solicitações/minuto seguindo principalmente os artigos e fazendo otimizações de TCP.

Com isso afetamos seriamente o tempo de carregamento do servidor. Posso dizer que não há carga média, pois esta é uma caixa nova e é baseada em Nginx. Tivemos no passado trabalhadores do Apache (menos de 300 solicitações/minuto). Agora com 350req/m temos uma carga AVG de 20. O que é demais e estamos procurando melhorar.

Quando usamos htop para investigar os processos, geralmente vemos cerca de 20 processos de php-fpm que usam intensamente todas as 16 CPUs, e a memória está em algum lugar em 2 GB de 24 GB.

Nosso objetivo é reduzir drasticamente a carga do sistema. Gostaria que usuários experientes compartilhassem seus conhecimentos sobre onde procurar e o que tentar. Postarei os números que você estiver solicitando, mas não queria preencher o post com isso no início.

Como você procederia para reduzir a carga do sistema, mas ainda manter o rendimento.

Responder1

Como estabelecemos que este é um problema puro de consumo de CPU (sem iowait), então realmente não consigo ver nenhuma maneira de manter o mesmo rendimento sem adicionar mais recursos. Reduza o número máximo de processos PHP ou adicione mais núcleos de CPU.

Ou faça com que os desenvolvedores usem algo diferente do ImageMagick.

Responder2

Se você tiver solicitações repetidas, poderá verificar o cache fastcgi (http://wiki.nginx.org/HttpFastcgiModule) ou use verniz na frente do nginx.

Isso permitirá que você armazene em cache as imagens processadas e não precise executar os processos pesados ​​da CPU novamente.

Responder3

Como sua pergunta afirma que os processos PHP-FPM estão na CPU TOP, imagino que você esteja usando as bibliotecas ImageMagick PHP (http://php.net/imagick).

Peça ao(s) seu(s) desenvolvedor(es) para testar o cenário em que o processamento da imagem é realizado diretamente pelo binário ImageMagick (ex. /usr/bin/[compare, import, display ...].

Se usar diretamente o binário funcionar, use a função php exec() e encapsule a chamada para os binários do ImageMagick e veja como funciona (em termos de CPU e duração).

@informação adicional:https://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

Responder4

Maneiras dos desenvolvedores

  1. tente diminuir a sobrecarga do php para processamento de imagens.
  2. tente usar menos recursos para processamento de imagens. Use imagens preparadas ou altere algumas operações com menos requisitos de desempenho

Modo de administração

  1. use CPUs mais poderosas

informação relacionada