Назад | Перейти на главную страницу

Как Ubuntu 20.04 может обрабатывать / ограничивать множество несохраняемых соединений?

Я играю с ограничениями 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?