Nginx client_body_in_file_only para desempenho de upload de arquivo

3

No meu aplicativo, tenho um proxy nginx no meu servidor de aplicativos (unicornio).

Estou tentando melhorar meu desempenho de upload de arquivos. Eu li que, através de várias técnicas, você pode impedir que os processos do seu aplicativo sejam bloqueados enquanto o arquivo é carregado. As informações atuais sobre a melhor maneira de abordar esse tópico parecem difíceis de encontrar (consulte pergunta ).

Estou tentando fazer isso usando client_body_in_file_only on; , que, segundo entendo, diz ao nginx para armazenar todo o pedido no disco.

O que eu estou confuso é que mesmo sem esta diretiva eu vejo isso em meus logs nginx:

2014/10/10 17:41:43 [warn] 50331#0: *798 a client request body is buffered to a temporary file /usr/local/var/run/nginx/client_body_temp/0040665399, client: 127.0.0.1, server: my_site.dev, request: "POST /upload HTTP/1.1", host: "my_site.dev", referrer: "https://my_site.dev/upload"

Parece-me que o nginx está armazenando em buffer o upload do arquivo para o disco de qualquer maneira. O nginx é apenas inteligente fora da caixa aqui? Ainda devo usar client_body_in_file_only ? Estou entendendo mal o que está acontecendo aqui?

    
por Jared Moody 11.10.2014 / 03:00

1 resposta

2

Como você pode melhorar o desempenho do upload fazendo o buffer nginx no disco? Toda vez que os bytes são recebidos (limitado pela MTU da transmissão é o melhor caso, ou no pior dos casos com pacotes de rede de carga 1b), eles serão gravados no disco. Normalmente, tenta-se evitar o pedido de acesso a carrega de vezes o disco, já que é um dispositivo lento ...

client_body_in_file_only , conforme declarado em sua documentação, é usado principalmente para depuração, quando você deseja manter uma cópia do corpo de solicitações de clientes para análise posterior. Esteja avisado que defini-lo como on faz com que o nginx mantenha todos os arquivos de solicitação não os excluindo depois que a solicitação tiver sido processada . O valor clean faz isso.

Essa diretiva não, como você pode ter entendido erroneamente (de) ativar o uso de buffer de disco per se . Você vê nginx usando o disco para armazenar em buffer os corpos de solicitação porque seus buffers de RAM não podem contê-los. Ele avisa porque provavelmente tem um impacto muito ruim no desempenho do servidor.

Você pode querer ampliar seus client_body_buffer_size para que os envios de arquivos permaneçam no mesmo nível possível na RAM, antes de ser escrito com a quantidade mínima de chamadas de gravação para o disco depois.

    
por 06.11.2014 / 14:52

Tags