
Estou usando o Nginx para fornecer arquivos .ts para transmissão ao vivo (HLS). Tudo funciona bem, mas há um problema com o tempo de resposta dos arquivos. Ocasionalmente, alguns arquivos .ts recebidos do servidor apresentam um tempo de resposta inesperadamente alto, o que é problemático em nosso caso de uso.
Eu usei um script python para descobrir qual é o problema.
Nesta captura de tela, o tempo de resposta completo é o tempo entre o envio da solicitação e o recebimento da resposta completa. O segundo parâmetro mostrado é o tempo entre o envio de uma solicitação e o recebimento de uma resposta. (Eu usei response.elapsed.total_seconds() no pacote de solicitações do python). Em solicitações lentas, o tempo de resposta completo é maior, mas response.elapsed.total_seconds() está OK. (E por mais alto quero dizer 3-4 vezes o tempo médio de resposta.)
Além desse problema, tenho outro problema em que tanto o tempo de resposta (response.elapsed.total_seconds()) quanto o tempo de resposta total são altos. Este caso acontece com menos frequência (talvez uma vez em 200 solicitações) e os tempos de resposta são muito maiores do que no primeiro caso.
Devo mencionar que tenho algumas outras máquinas na frente desta máquina para fazer proxy e armazenar arquivos em cache. Mas não importa se eu solicito as máquinas de cache ou a principal. O resultado é o mesmo.
Aqui está minha configuração do Nginx:
user root;
worker_processes 16;
worker_rlimit_nofile 1000000;
master_process on;
pid /run/nginx.pid;
events {
worker_connections 500000;
accept_mutex off;
multi_accept off;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 150;
# keepalive_requests 5;
aio on;
gzip on;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
client_body_buffer_size 1k;
client_max_body_size 1k;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
tcp_nodelay on;
sendfile_max_chunk 1m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2;
proxy_intercept_errors on;
proxy_http_version 1.1;
vhost_traffic_status_zone shared:vhost_traffic_status:10m;
underscores_in_headers on;
recursive_error_pages on;
server {
listen 80 backlog=10000000;
location /tmp {
access_log /cache/nginx.log main;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /cache/hls;
add_header Cache-Control no-cache;
}
}
O acesso e os logs de erros do Nginx não mostram nada de anormal. Nem pelas boas respostas nem pelas lentas.
Não consegui encontrar nada sobre esse problema até agora. Espero poder encontrar uma resposta aqui.