對於數百個請求中的一個,Nginx 伺服器回應時間出乎意料地高

對於數百個請求中的一個,Nginx 伺服器回應時間出乎意料地高

我正在使用 Nginx 提供用於即時串流媒體 (HLS) 的 .ts 檔案。一切正常,但文件的回應時間有問題。有時,從伺服器接收到的某些 .ts 檔案的回應時間出乎意料地高,這在我們的用例中是有問題的。

我使用了 python 腳本來尋找問題所在。 python腳本列印回應時間的輸出

在此螢幕截圖中,完整回應時間是發送請求和收到完整回應之間的時間。顯示的第二個參數是發送請求和接收回應之間的時間。 (我在python的requests套件中使用了response.elapsed.total_seconds())。在緩慢的請求中,完整回應時間較長,但 response.elapsed.total_seconds() 還可以。 (我所說的更高是指平均回應時間的 3-4 倍。)

除了這個問題之外,我還有另一個問題,其中回應時間(response.elapsed.total_seconds())和完整回應時間都很高。這種情況發生的頻率較低(可能每 200 個請求就會發生一次),並且回應時間比第一種情況要長得多。

我應該要提到的是,我在這台機器前面還有一些其他機器來代理和快取檔案。但無論我請求快取機器還是主機器都沒關係。結果是一樣的。

這是我的 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;
     }
}

Nginx存取和錯誤經驗沒有顯示任何異常。無論是良好的反應還是緩慢的反應。

直到現在我還沒有找到關於這個問題的任何資訊。希望我能在這裡找到答案。

相關內容