сокет.влияние ввода-вывода на производительность сервера Ubuntu

#node.js #sockets #websocket #socket.io #ubuntu-18.04

#node.js #сокеты #websocket #socket.io #ubuntu-18.04

Вопрос:

Я несколько раз пытался масштабировать свое приложение для чата с помощью socket.io . Я столкнулся с какой-то стеной при попытке установить более 2 тыс. подключений к веб-сокетам на одном компьютере. Это число кажется немного низким, учитывая, что на моем локальном компьютере установлено 8 ядер с оперативной памятью объемом 6 ГБ, и во время теста используется только половина оперативной памяти и центрального процессора. Будучи новичком в веб-сокете и Linux, я, возможно, не совсем правильно настроил свой сервер, поэтому я увеличил максимальное количество открытых файлов до 500000 и максимальное количество открытых сокетов (maxconn) до 60000 без какого-либо эффекта.

Итак, мои вопросы:-

  1. Как это повлияет на производительность сервера?
  2. Сколько еще запросов в секунду это вызовет на моем сервере?
  3. Существует ли ограничение на количество подключений, которые могут быть созданы локально с помощью socket.io ?
  4. Сколько одновременных подключений вам удалось установить на одном компьютере с помощью такого рода настроек?
  5. Есть ли какие-либо другие настройки Linux, которые нужно настроить для повышения производительности?

В настоящее время я использую Ubuntu 18.04 и мое приложение в node.js .

Комментарии:

1. Вы получаете сообщение об ошибке относительно того, что здесь происходит? Возможно, у вас закончились файловые дескрипторы, но это также может означать, что открытие тысяч tcp-сокетов перегружает ваш маршрутизатор. Работает ли тот же код на localhost? Как насчет локальной сети?

2. Очень сложно найти решение вашей проблемы, используя только эту информацию. Я бы рекомендовал установить средство мониторинга на вашем экземпляре. Есть хороший шанс, что вы поймаете какое-то странное поведение таким образом. У меня был хороший опыт использования github.com/netdata/netdata

3. Начните с рефакторинга вашего кода. Например, удалите функции ‘Sync’ (т. Е. readFileSync) и замените их кодом обратного вызова. И используйте Async / Await. Тогда вы начнете видеть, как подключаются другие ядра.

4. @gergelykalman на локальном хостинге все работает нормально. Но нужно знать о сервере.

5. @ofirule Спасибо. Я установлю и дам вам знать.