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
- tente diminuir a sobrecarga do php para processamento de imagens.
- 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
- use CPUs mais poderosas