
Ich verwende Nginx, um .ts-Dateien für Live-Streaming (HLS) bereitzustellen. Alles funktioniert einwandfrei, aber es gibt ein Problem mit der Reaktionszeit der Dateien. Gelegentlich haben einige vom Server empfangene .ts-Dateien eine unerwartet hohe Reaktionszeit, was in unserem Anwendungsfall problematisch ist.
Ich habe ein Python-Skript verwendet, um das Problem herauszufinden.
In diesem Screenshot ist die vollständige Antwortzeit die Zeit zwischen dem Senden der Anfrage und dem Empfangen der vollständigen Antwort. Der zweite angezeigte Parameter ist die Zeit zwischen dem Senden einer Anfrage und dem Empfangen einer Antwort. (Ich habe response.elapsed.total_seconds() im Requests-Paket von Python verwendet.) Bei langsamen Anfragen ist die vollständige Antwortzeit höher, aber response.elapsed.total_seconds() ist OK. (Und mit höher meine ich 3-4 Mal die durchschnittliche Antwortzeit.)
Zusätzlich zu diesem Problem habe ich ein weiteres Problem, bei dem sowohl die Antwortzeit (response.elapsed.total_seconds()) als auch die Gesamtantwortzeit hoch sind. Dieser Fall tritt seltener auf (vielleicht einmal bei 200 Anfragen) und die Antwortzeiten sind viel höher als im ersten Fall.
Ich sollte erwähnen, dass ich vor dieser Maschine noch einige andere Maschinen habe, die als Proxy und Cache für Dateien dienen. Aber es spielt keine Rolle, ob ich die Cache-Maschinen oder die Hauptmaschine anfordere. Das Ergebnis ist das gleiche.
Hier ist meine Nginx-Konfiguration:
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;
}
}
Die Zugriffs- und Fehlerprotokolle von Nginx zeigen nichts Ungewöhnliches. Weder bei den guten noch bei den langsamen Antworten.
Zu diesem Problem konnte ich bisher nichts finden. Hoffe, dass ich hier eine Antwort finden kann.