TCPListener in golang: ошибка, когда количество соединений превышает 60/260 - PullRequest
0 голосов
/ 04 апреля 2020


Я создаю TCP Proxy: client <-> proxy <-> Vertica
У меня есть net.TCPListener, который принимает входящие запросы на AcceptTCP() и создает подключения, затем , установив соединение с целевым сокетом net.DialTCP("tcp", nil, raddr). Похоже на мост. Модель прокси по умолчанию.

Во-первых, в первой версии у меня проблема: если у меня 59 параллельных входящих запросов, все в порядке. Но если у меня есть еще один (60), у меня проблема: 1-59 соединений в порядке, но 60 и более новые неисправны. Я не могу поймать ошибку правильно. Похоже, какой-то сокет неожиданно закрывается

Во-вторых, я попытался установить очередь для слушателя. Это мне очень помогает: но если у меня более 258 запросов, я снова получаю сообщение об ошибке.

Мой вопрос: есть ли ограничения на количество соединений в пакете net? Может быть, это системное ограничение?

Для внешней информации: Vertica работает в docker контейнере, hw / system: macbook, предельный пул соединений vertica: 5, но логический пул c реализован в прокси. Я также попытался установить «сырой» прокси без лога пула c (поэтому я установил очередь для слушателя: я не должен превышать порог пула пользователя Vertica), результат - 258 запросов ..

ОБНОВЛЕНО: (05.04.2020)
Похоже, что это ошибка системных ограничений. Я упоминал где-нибудь, что я пытаюсь запустить всю систему на одном P C?
Итак, что у меня было:

  • 300 параллельных процессов в качестве запросов (выполнение с помощью многопроцессорной обработки. Бассейн Python) (300 сокетов)
  • Слушатель, который создает 300 соединения (еще 300 сокетов)
  • И серия быстро создаваемых / закрывающихся сокетов в глубине прокси (согласно очереди и пулу Vertica)

Что у меня сейчас:

  • 300 python запросов от другого P C в моей локальной сети (на Windows)
  • Прокси работает нормально
  • Но у меня есть несколько ошибки на Windows P C, которые создают запросы к моему прокси. Ошибки, такие как нехватка памяти в «файле подкачки».

Мне все еще нужно провести стресс-тест для прокси. Добавление меньше памяти для файла подкачки не решило мою проблему на Windows P C. Буду благодарен за любые предложения и идеи. Спасибо!

1 Ответ

0 голосов
/ 05 апреля 2020

Как прокси подключается к Vertica? По умолчанию к одному узлу Vertica одновременно может быть подключено не более 50 обычных пользователей. Суперпользователь "dbadmin" всегда имеет 5 подключений в дополнение к этому.

Так что, если я попытаюсь подключиться 60 раз как dbadmin, я получу это в конфигурации Vertica по умолчанию:

Connection attempt failed: FATAL 4060:  New session rejected due to limit, already 55 sessions active

Вы может увеличить элемент конфигурации Vertica MaxClientSessions со значения по умолчанию 50 для узла.

Например, команда: ALTER NODE <_node_name_> SET MaxClientSessions = 100.

Я полагаю, вы всегда подключаетесь к одному и тому же узлу Vertica и что вы установили ConnectionLoadBalancing на FALSE. Таким образом, вы всегда подключаетесь к одному и тому же узлу и вскоре достигаете максимального значения по умолчанию, равного 50.

Надеюсь, что причина найдена ....

...