Я играю с ограничениями TCP-соединений и keep-alive в Linux, тестируя сервер Redis, работающий на Ubuntu 20.04, с другого сервера 20.04.
Насколько я понимаю, это должно легко подсматривать количество TCP-соединений в состоянии TIME_WAIT, поскольку оно не поддерживается, но это не так:
$ redis-benchmark -h redis-test -k 0 -t set -r 100000 -n 100000
Через несколько секунд число SET уменьшается с 3500 до примерно 700, но тест продолжается. Во время выполнения теста я легко могу открыть другое соединение redis cli с того же сервера.
Netstat постоянно сообщает о 15000 подключениях, большинство из которых, очевидно, в TIME_WAIT.
$ netstat -anp|wc
15766 110556 1591331
Основная причина этого вопроса заключается в том, что выполнение того же теста на OKD 3 (CentOS 7.7) приводит к ожидаемому (?) Провалу, когда количество TIME_WAIT достигает примерно 28000. В OKD тесты не проходят, когда пул соединений заполнен, и Я не могу связаться с сервером Redis в течение 60 секунд.
Машины с Ubuntu просто ванильные. OKD поддерживаются третьей стороной, но все системы имеют
net.ipv4.ip_local_port_range = 32768 60999
Однако только Ubuntu имеет значение для tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 2
Это логическое значение, и 2 означает 0 по результатам моего тестирования. Ubuntu работает намного лучше с этим значением, равным 1, поскольку соединения используются повторно.
В Ubuntu есть redis-cli 5.0.7, а в OKD - redis-cli 5.0.3. Серверы Redis совершенно разные, но в данной ситуации меня это не волнует.
Какое волшебство творит Ubuntu, чего нет в Cent OS?