Случайные тайм-ауты с веб-сервера, когда многие клиенты находятся за NAT

У меня проблема с моим веб-сервером Ubuntu 14.04. В моей компании мы разрабатываем приложение, и это приложение обращается к веб-серверу, отправляя HTTP-запросы. Проблема в том, что когда к веб-серверу каким-то образом подключены многие ПК или устройства, в нашей локальной сети возникают странные случайные таймауты. Мы здесь за маршрутизатором / NAT. Доступ к веб-серверу через 4G - это нормально, без тайм-аутов, никогда. Что действительно помогло, так это установка net.ipv4.tcp_timestamps = 0 в /etc/sysctl.conf , это значительно уменьшило время ожидания. Но иногда все еще есть таймауты и / или медленное соединение с сервером. Я думаю, что медлительность происходит из-за потерянных пакетов или пакетов, которые не могут быть доставлены правильно, я не знаю.

Сервер имеет 32 ГБ ОЗУ, Intel Xeon D-1540 (8 ядер). Он работает под управлением NginX 1.10 и PHP-FPM 7.1

Есть ли у кого-нибудь подсказка для особой настройки или что я могу попытаться найти решение?

Вот мой полный sysctl.conf

fs.file-max = 2097152

# Do less swapping
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2

### GENERAL NETWORK SECURITY OPTIONS ###

# Number of times SYNACKs for passive TCP connection.
net.ipv4.tcp_synack_retries = 2

# Allowed local port range
net.ipv4.ip_local_port_range = 2000 65535

# Protect Against TCP Time-Wait
net.ipv4.tcp_rfc1337 = 1

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15

# Decrease the time default value for connections to keep alive
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15

### TUNING NETWORK PERFORMANCE ###

#Helped a lot by reducing the timeouts
net.ipv4.tcp_timestamps = 0

# Default Socket Receive Buffer
net.core.rmem_default = 31457280

# Maximum Socket Receive Buffer
net.core.rmem_max = 12582912

# Default Socket Send Buffer
net.core.wmem_default = 31457280

# Maximum Socket Send Buffer
net.core.wmem_max = 12582912

# Increase number of incoming connections
net.core.somaxconn = 50000

# Increase number of incoming connections backlog
net.core.netdev_max_backlog = 65536

# Increase the maximum amount of option memory buffers
net.core.optmem_max = 25165824

# Increase the maximum total buffer-space allocatable
# This is measured in units of pages (4096 bytes)
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144

# Increase the read-buffer space allocatable
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.udp_rmem_min = 16384

# Increase the write-buffer-space allocatable
net.ipv4.tcp_wmem = 8192 65536 16777216
net.ipv4.udp_wmem_min = 16384

# Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

# Disable TCP slow start on idle connections
net.ipv4.tcp_slow_start_after_idle = 0

NginX config ( extract):

events {
        worker_connections 4096;
        multi_accept on;
        use epoll;
}

http {

        client_body_buffer_size 10K;
        client_header_buffer_size 1k;
        client_max_body_size 8m;
        large_client_header_buffers 4 16k;

        client_body_timeout 12;
        client_header_timeout 12;
        keepalive_timeout 0;
        send_timeout 10;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;

}
0
задан 19 August 2016 в 15:15
1 ответ

Если у вас есть несколько пользователей, подключающихся к этому веб-серверу из-за устройства NAT, наличие net.ipv4.tcp_tw_recycle = 1 вызовет проблемы .

См. здесь для подробного описания проблемы.

Когда удаленный хост фактически является устройством NAT, условие меток времени будет запрещать все хосты, кроме одного, находящегося за устройством NAT. для подключения в течение одной минуты, потому что у них разные часы с меткой времени. В случае сомнений, лучше отключить эту опцию, так как это затрудняет обнаружение и диагностику проблем.

0
ответ дан 5 December 2019 в 09:40

Теги

Похожие вопросы