2009-04-28 9 views
0

こんにちは私は、Java NIOを使用してソケットとクライアントプログラムを作成しました。 私のサーバとクライアントは異なるコンピュータにあり、サーバにはLinux OSとCLIENTがWINDOWS OSを持っています。私がクライアント上で1024のソケットを作成したときはいつでも、私のクライアントマシンはサポートしていますが、サーバではあまりにも多くのファイルオープンエラーがあります。 それで、サーバーに何のエラーもなく15000ソケットを開く方法。 15000クライアントと同時に接続する方法はありますか?ファイルが多すぎますJava NIOで開くエラー

おかげ BAPI

答えて

3

なぜあなたは一台のマシン上で15000個のソケットを持っている必要がありますか?とにかく、を見てulimit -n

+0

のおかげでマシューFlaschen、 のulimit -nは私に1024それはどういう意味を与えます。 また、15000クライアントに同時に接続するにはどうすればいいですか? ありがとう、 Bapi – Deepak

+1

man ulimit。 サーバーを起動する前に ulimit -n 20000を実行すると、プロセスはさらにファイルを開くことができます。 – KarlP

+0

(同じシェル/起動スクリプト内) – KarlP

1

もしあなたが15000人のクライアントとあなたのサーバーと話しているなら(もしあなたのコメントにしたがって将来的には200,000人)、私はそれらのクライアントにサービスするスケーラビリティの問題があると思う一度接続されると(接続している場合)

私はあなたが戻って、これらの種類の数字を成功裏に達成するためにアプリケーションやデプロイメントを設計する方法を見直す必要があるかもしれないと思います。

+0

こんにちはブライアン、 あなたの情報をありがとう。多くのクライアントを作成せずに15000を超える接続を作成する方法については、正しい方向に案内してください。 – Deepak

+0

コメントフィールドのスペースにはありません。私はあなたのアプリケーションの必要な機能に基づいて、グーグルを始めなければならないかもしれないと思います。運が良かった –

6

なぜ15Kのソケットが必要なのか質問するのは別の議論です。

答えは、ユーザーのファイル記述子の制限にぶつかっているということです。

リスナーで使用するユーザーに記録し、$ ulimit -nを実行して現在の制限を確認します。ファイル/etc/security/limits.conf

ルート編集を使用して

ほとんどの場合1024

と設定 - >

{username} soft nofile 65536 
{username} hard nofile 65536 

65536を単なる提案で、あなたのアプリからそれを把握する必要があります。

ログオフしてもう一度ログインし、ulimit -nを使用して再確認してください。

おそらく15fds以上が必要です。 lsofであなたのアプリを監視する。

$cat /proc/sys/fs/file-max 

を1つを向上させるために、次の行を追加します。このよう

:あなたはそれをチェックする必要があるのでところで

$lsof -p {pid} <- lists all file descriptors 
$lsof -p {pid} | wc -l <- count them 

は、あなたはまた、システム全体のFDの上限を打つかもしれません/etc/sysctl.confの

#Maximum number of open FDs 
fs.file-max = 65535 
関連する問題