MySQLの接続は、3000回の+の試行後に失敗します
-
12-09-2019 - |
質問
私は、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接続を追跡するために予約されるメモリのうちのカーネルを実行することができます。
所属していません StackOverflow