
Estoy usando Nginx para entregar archivos .ts para transmisión en vivo (HLS). Todo funciona bien pero hay un problema con el tiempo de respuesta de los archivos. Ocasionalmente, algunos archivos .ts recibidos del servidor tienen un tiempo de respuesta inesperadamente alto, lo cual resulta problemático en nuestro caso de uso.
He utilizado un script en Python para encontrar cuál es el problema.
En esta captura de pantalla, el tiempo de respuesta completo es el tiempo entre que se envía la solicitud y se recibe la respuesta completa. El segundo parámetro que se muestra es el tiempo entre el envío de una solicitud y la recepción de una respuesta. (He usado Response.elapsed.total_segundos() en el paquete de solicitudes de Python). En solicitudes lentas, el tiempo de respuesta total es mayor, pero respuesta.elapsed.total_segundos() está bien. (Y por mayor me refiero a 3 o 4 veces el tiempo de respuesta promedio).
Además de este problema, tengo otro problema en el que tanto el tiempo de respuesta (response.elapsed.total_segundos()) como el tiempo de respuesta total son altos. Este caso ocurre con menos frecuencia (quizás una vez cada 200 solicitudes) y los tiempos de respuesta son mucho mayores que en el primer caso.
Debo mencionar que tengo otras máquinas frente a esta para almacenar archivos proxy y caché. Pero no importa si solicito las máquinas caché o la principal. El resultado es el mismo.
Aquí está mi configuración de 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;
}
}
Los registros de errores y acceso de Nginx no muestran nada anormal. Ni por las buenas respuestas ni por las lentas.
No pude encontrar nada sobre este problema hasta ahora. Espero poder encontrar una respuesta aquí.