Вероятно, вы просто перегружаете свой сервер. Операционная система будет поддерживать только ограниченную очередь ожидающих соединений, и ваше приложение почти наверняка имеет ограниченное число потоков, обрабатывающих входящие соединения.
Я бы посоветовал вам начать запись метрик о том, сколько у вас потоков обработки в режиме ожидания и (если вы можете), сколько ожидающих подключений находится в очереди операционной системы. Если у вас постоянно нулевые незанятые потоки и очередь ОС на максимуме или близко к нему, то вы знаете, что достигли пределов своего аппаратного и / или программного обеспечения и / или базы данных.
Вы также должны следить за показателями загрузки процессора и ввода-вывода операционной системы. Это может помочь сузить место вашего узкого места. Если вы не увеличили максимальную нагрузку на ЦП, но у вас много ожидания ввода-вывода, вам необходимо оптимизировать операции ввода-вывода. Если вы постоянно используете 100% ЦП, вам нужно либо сделать свой код более эффективным, либо использовать больше оборудования. Вам также необходимо следить за сборщиком мусора, потому что если он начнет вращаться, это снизит производительность.
С настройкой производительности сложно. Вы действительно должны быть очень осторожны с тем, что вы измеряете, но загрузка ЦП, ожидание ввода-вывода, сетевая активность и потребление памяти - хорошее начало.