Я запускаю серию серверных программ на Windows Server 2016, которые используют сервер MySQL (MariaDB 10.0.27). Сначала все нормально, серверы подключаются к базе данных, клиенты могут подключаться к серверным программам, все в рамках ожиданий. Но после того, как программы проработали несколько часов, я внезапно не могу создать ни одного новый подключений к серверу MySQL больше. Серверные программы все еще работают, я могу подключиться к ним, и они, похоже, все еще используют сервер базы данных, но когда я сам пытаюсь подключиться к серверу MySQL, я получаю следующее сообщение об ошибке:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (10055 "Unknown error")
Сначала в сообщении об ошибке говорилось следующее, но поиск заставил меня увеличить количество доступных TCP-портов, поскольку их отсутствие предположительно было причиной который ошибка.
(HY000/2002): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
Мой MaxUserPort
параметр реестра в настоящее время 51024
. Однако проблема не исчезла, изменилось только сообщение об ошибке.
Теперь, когда я закрываю серверные программы, я могу снова создавать новые соединения, ничего не меняя о постоянно работающем сервере MySQL, и после того, как я снова их запустил, я все еще могу создавать новые соединения на некоторое время. Я подумал, что это может быть ограничение количества подключений MySQL, но этот параметр в настоящее время равен 1500 в my.ini, и я не вижу никаких ошибок в консоли MySQL.
max_connections = 1500
Кроме того, я заметил, что как только я больше не могу создавать новые подключения, я также не могу открывать какие-либо веб-сайты в своем браузере, получая сообщение об ошибке ERR_CONNECTION_FAILED
, что заставляет меня снова задуматься об ограничении порта TCP. Но когда я бегу netstat
Я вижу менее 300 подключений, и я понимаю, что даже с настройками по умолчанию это должно быть нормально. я тоже могу Начало веб-сервер, но я не могу ничего открыть на нем через HTTP с того же компьютера. я жестяная банка доступ к содержимому веб-сервера извне.
Я совершенно не понимаю, что здесь происходит. Есть у кого-нибудь идеи?
Проблема оказалась в истощении гнезда / ручки. Сначала я использовал ProcessExplorer для мониторинга серверных процессов, и они продолжали создавать новые дескрипторы, а именно сокеты, предположительно пытаясь куда-то подключиться. Я предполагаю, что они неправильно разместили эти соединения или что-то в этом роде, потому что со временем эти несколько процессов накопили> 60 тысяч дескрипторов каждый, прежде чем я больше не мог создавать новые соединения.
Затем я использовал TCPView для мониторинга соединений сервера, и они продолжали пытаться подключиться к чему-то на локальном порту, где серверы ожидали сервера NoSQL, о котором я раньше не знал. Как только я запустил этот сервер базы данных, программы успешно подключились к нему и перестали создавать новые соединения в бесконечном цикле.