Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Почему закрытие сокетов нагружает процессор гораздо больше, чем их открытие?
Как это ни странно, обеспечить необходимую нагрузку было сложнее, чем создать сервер. Дело в том, что TCP-соединение уникально определяется четверкой [source ip, source port, dest ip, dest port], таким образом с одной машины на 1 порт сервера можно создать не более 64 тыс одновременных соединений (по количеству source ports).root@oxpa-desk:~# sysctl fs.file-max=2147483648
fs.file-max = 2147483648
root@oxpa-desk:~# grep -i dhc /var/log/messages*^C
root@oxpa-desk:~# sysctl -a | grep file-max
error: "Invalid argument" reading key "fs.binfmt_misc.register"
error: permission denied on key 'net.ipv4.route.flush'
error: permission denied on key 'net.ipv6.route.flush'
fs.file-max = -18446744071562067968
root@oxpa-desk:~# sysctl fs.file-max=2147483647
fs.file-max = 2147483647
root@oxpa-desk:~# sysctl -a | grep file-max
error: "Invalid argument" reading key "fs.binfmt_misc.register"
fs.file-max = 2147483647
oxpa@oxpa-desktop:~$ sysctl -a 2>/dev/null| grep tcp_[rw]mem
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
var pingInterval = setInterval(function() {
res.write('ping');
}, 20*1000);
Отправка простого сообщения — это тоже syscall, если что :)
При нагрузке в 300% из 800% вполне можно позволить иметь пул на 1000 соединений в базу и делать туда read/write.
открытые дескрипторы между воркерами передаватьЕсли он на самом деле акцептит подключения в мастере и передает воркерам каждый сокет, то я сильно удивлён…
Можно было бы создать 16 сетевых интерфейсов с разными IP
А вот если клиенту выдано всего лишь «две машины в одном броадкастовом сегменте и без фильтрации на порту», то подобное поведение может быть расценено как попытка нарушения работы сети.
Миллион одновременных соединений на Node.js