Die Antwortzeit des Nginx-Servers ist bei einer von Hunderten von Anfragen unerwartet hoch

Die Antwortzeit des Nginx-Servers ist bei einer von Hunderten von Anfragen unerwartet hoch

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. Ausgabe der Python-Skriptdruckantwortzeit

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.

verwandte Informationen