質問

私は、MySQLの接続を確認正気にPrologで小さなスクリプトをテストしていました。接続は、周りの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).
役に立ちましたか?

解決

TCPコネクションは、彼らが閉じられた後も、カーネルメモリを取ります。あなたが言う場合:

netstat -na |grep WAIT

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top