Мне нужно настроить сервер для обработки более миллиона открытых соединений websocket (в идеале 1.5-2.0).

Я использовал конфигурацию из этого поста:

sysctl -w fs.file-max=12000500
sysctl -w fs.nr_open=20000500
ulimit -n 20000500
sysctl -w net.ipv4.tcp_mem='10000000 10000000 10000000'
sysctl -w net.ipv4.tcp_rmem='1024 4096 16384'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16384'
sysctl -w net.core.rmem_max=16384
sysctl -w net.core.wmem_max=16384

Однако мое приложение перестает применять новые подключения после того, как оно достигнет 469219 подключений. Что еще я могу пропустить? Я действительно думаю, что чего-то не хватает в конфигурации ОС. Наше основное приложение написано на Java(с сервером Tomcat), но я также получил те же результаты с сервером NodeJS.

Мы используем Ubuntu с 16 ГБ оперативной памяти.

1 ответ1

0

В блоге вы прямо заявляете, что 12M сокеты используют 46 ГБ ОЗУ для стека TCP - в дополнение к тому, что еще работает.

Если у вас есть только 16 ГБ, тогда запустите Tomcat с приложением, и у вас просто не будет достаточно ОЗУ для приема большего количества соединений. Цифры NodeJS похожи, но не равны, потому что свободная RAM похожа, но не равна.

Обновление до 128 или 256 ГБ, и я подозреваю, что это будет работать нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .