2

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

1 に答える 1

2

TCP 接続は、閉じた後でもカーネル メモリを消費します。あなたが言うなら:

netstat -na |grep WAIT

これらの 3000 接続のほとんどは、通常 120 秒間続く TIME_WAIT 状態のままであることがわかると思います。あなたのケースではより低い値に最適化されるかもしれませんが、それでも 30 秒のようにかなり長いです。プログラムがその時間内に十分な接続を確立できる場合は、TCP 接続を追跡するために予約されているメモリを使い切ってカーネルを実行できます。

于 2009-12-04T12:05:15.483 に答える