
Я использую Nginx для обслуживания файлов .ts для потоковой передачи в реальном времени (HLS). Все работает отлично, но есть проблема со временем отклика файлов. Иногда некоторые файлы .ts, полученные с сервера, имеют неожиданно высокое время отклика, что является проблемой в нашем случае использования.
Я использовал скрипт 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 не показывают ничего аномального. Ни для хороших ответов, ни для медленных.
Я не мог найти ничего об этой проблеме до сих пор. Надеюсь, я смогу найти ответ здесь.