残念ながら、サーバーの性質の詳細をあまり提供していません。あなたは典型的なTCPサーバーを書いていると思います。この回答では、Java 固有の詳細については触れません。
簡単なアドバイスは、クライアント接続間に遅延を挿入することです。それがなければ、サーバーへの DoS 攻撃を積極的にシミュレートしています。
長いものについては、以下をお読みください。
通常、TCP サーバーは、(素敵な C インターフェイスで) 関数を呼び出し、その結果 (この場合) をand関数に渡すことによって、リッスンソックスを 1 つだけ作成します。この準備の後、サーバーは、(ソケットがブロッキングとしてマークされている場合) サーバーをスリープ状態にする を呼び出し、地球の反対側のクライアントが関数の呼び出しを開始する場合は、 (サーバー側で)よりもOS カーネルのサポートにより、接続されたソケットが作成されます。int sockfd = socket(...)
sockfd
bind()
listen()
accept()
connect()
accept()
可能な保留接続の実際の数は、関数を見ることで知ることができlisten()
ます。OSカーネルがソケットにキューイングする必要がある接続の最大数を定義listen()
するバックログパラメータがあります(これは基本的に、および状態のすべての接続の合計です)。歴史的に、1980 年代のバックログの推奨値は 5 程度でしたが、これは現代では明らかに惨めです。たとえば、FreeBSD 7.2 では、次のように入力して、バックログのハード リミットを推測できます。SYN_RCVD
ESTABLISHED
% sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 128
そしてFedora 10では:
% cat /proc/sys/net/core/somaxconn
128
PS
私のひどい英語でごめんなさい。