Соединение MySQL завершается неудачей после 3000+ попыток

StackOverflow https://stackoverflow.com/questions/1846537

Вопрос

Я просто тестировал небольшой скрипт на Прологе, чтобы проверить работоспособность соединения с MySQL.Соединение терпит неудачу случайным образом после создания около 3000+ подключений.Есть ли какое-либо ограничение в MySQL Server на количество подключений?

:-dynamic db_connection/1.

sanity_check_open_db:-
            odbc_connect('myDSN', _,
            [ user(bob),
              password(pop),
              alias(myDSN),
              open(once)
            ]),

            (   db_connection(_),
                retractall(db_connection(_))
            ;   assert(db_connection(myDSN))).

sanity_chec_close:-
            (   db_connection(C),
                odbc_disconnect(C),
                retractall(db_connection(C))
            ;   write('Error: No connection opened to close')).

sanity_check_open_close(10000).

sanity_check_open_close(N):-
    format(atom(C),'~wth Iteration~n',[N]),
    write(C),
            sanity_check_open_db,
            sanity_chec_close,
            N1 is N + 1,!,
            sanity_check_open_close(N1).
Это было полезно?

Решение

TCP-соединения занимают память ядра даже после их закрытия.Если вы скажете:

netstat -na |grep WAIT

Я думаю, вы обнаружите, что большинство из этих 3000 соединений все еще находятся в состоянии TIME_WAIT, которое обычно длится 120 секунд.В вашем случае оно может быть оптимизировано до более низкого значения, но все равно будет довольно длинным, например, 30 секунд.Если ваша программа может установить достаточно соединений за это время, вы можете запустить ядро ​​из памяти, зарезервированной для отслеживания TCP-соединений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top