Время ответа сервера Nginx неожиданно велико для одного из сотен запросов

Время ответа сервера Nginx неожиданно велико для одного из сотен запросов

Я использую Nginx для обслуживания файлов .ts для потоковой передачи в реальном времени (HLS). Все работает отлично, но есть проблема со временем отклика файлов. Иногда некоторые файлы .ts, полученные с сервера, имеют неожиданно высокое время отклика, что является проблемой в нашем случае использования.

Я использовал скрипт Python, чтобы выяснить, в чем проблема. вывод скрипта python, печатающего время отклика

На этом снимке экрана полное время ответа — это время между отправкой запроса и получением полного ответа. Второй показанный параметр — это время между отправкой запроса и получением ответа. (Я использовал response.elapsed.total_seconds() в пакете requests python). В медленных запросах полное время ответа больше, но 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 не показывают ничего аномального. Ни для хороших ответов, ни для медленных.

Я не мог найти ничего об этой проблеме до сих пор. Надеюсь, я смогу найти ответ здесь.

Связанный контент