(最終解決)No buffer space available(maximum connections reached?)
1099 ワード
異常シナリオ:最近テストを行う際にSocketリンクを使用し、大量の同時実行を行う必要があるため、複数のスレッドを使用してsocketを作成し、それぞれ1つのsocketを作成してください.プログラムは途中まで実行している間に以下のエラーを報告しました.
エラーメッセージもよくわかりますが、リンク数が最大値範囲を超えており、十分なバッファがないのでconnectを作成し続けます.socketがリクエスト後に閉じても、この問題が発生します.これは,サービスインタフェースが処理するものが多すぎてタイムアウトし,close以降もすぐに解放できず,最後の「maximum connections reached」をもたらすことを示している.
異なる状況に対して異なる解決方法があり、ネット上でも多くの類似の問題が見られますが、上記の問題に対して、私の解決方法は、「短い接続」(使用後直接閉じる)の代わりに「長い接続」を使用することです.ここでいう「長い接続」は、実は私たちがよく言う接続プールであり、接続を必要とするバッファプールを作成し、管理する技術であり、これらの接続はスレッドによって使用される準備ができています.プール内には切れていない接続が置かれており、使い終わったら返却する.
「長い接続」の手段を使うことで、私の問題も解決されました~~~私と同じ問題に直面した人を助けてほしいです.
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
エラーメッセージもよくわかりますが、リンク数が最大値範囲を超えており、十分なバッファがないのでconnectを作成し続けます.socketがリクエスト後に閉じても、この問題が発生します.これは,サービスインタフェースが処理するものが多すぎてタイムアウトし,close以降もすぐに解放できず,最後の「maximum connections reached」をもたらすことを示している.
異なる状況に対して異なる解決方法があり、ネット上でも多くの類似の問題が見られますが、上記の問題に対して、私の解決方法は、「短い接続」(使用後直接閉じる)の代わりに「長い接続」を使用することです.ここでいう「長い接続」は、実は私たちがよく言う接続プールであり、接続を必要とするバッファプールを作成し、管理する技術であり、これらの接続はスレッドによって使用される準備ができています.プール内には切れていない接続が置かれており、使い終わったら返却する.
「長い接続」の手段を使うことで、私の問題も解決されました~~~私と同じ問題に直面した人を助けてほしいです.