3000次尝试后,mysql连接失败

时间:2009-12-04 12:01:29

标签: mysql database-connection prolog swi-prolog

我只是在Prolog中测试一个小脚本来检查MySQL连接的完整性。在建立大约3000多个连接后,连接失败。 MySQL服务器的连接数是否有任何限制

:-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).

1 个答案:

答案 0 :(得分:2)

TCP连接占用内核内存,即使它们已关闭。如果你说:

netstat -na |grep WAIT

我认为你会发现这3000个连接中的大多数仍处于TIME_WAIT状态,通常持续120秒。它可能会在你的情况下优化到较低的值,但仍然很长,如30秒。如果你的程序在那段时间内可以建立足够的连接,你可以运行内核以保留用于跟踪TCP连接的内存。