0

サーバーで2つのポートを開き、1つは本番用、2つは監視用、1つは別のサーバーへのtelnet用のクライアントを開きます。しかし、私のサーバーは、最大1日実行すると常に「多くの開いているファイル」への通知を受け取りました.私のコードは以下のようです:

    ServerBootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

    private PipelineServer ps= new PipelineServer(listenMessage1);
    bootstrap.setPipelineFactory(ps);

    bootstrap.setOption("child.tcpNoDelay", true);
    bootstrap.setOption("child.keepAlive", true);
    bootstrap.setOption("reuseAddress", true);

    bootstrap.bind(new InetSocketAddress(server_port));

    ServerBootstrap bootstrap2 = new ServerBootstrap( new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

    private PipelineServer ps2 new PipelineServer(listenMessage2);
    bootstrap2.setPipelineFactory(ps2);

    bootstrap2.setOption("child.tcpNoDelay", true);
    bootstrap2.setOption("child.keepAlive", true);
    bootstrap2.setOption("reuseAddress", true);

    bootstrap2.bind(new InetSocketAddress(server_port2));

ポート生成とポート監視の間の通信のための listenMessage1 と listenMessage2、ハンドラーのデコードとエンコードは StringDecoder() と StringEncoder() を使用します。しかし、プログラムが長時間実行された場合: 例: 1 日、ログに「多くの開いているファイル」が見つかり、サーバーに接続できません。

あなたの解決策をお願いします。ありがとう

4

1 に答える 1

0

ulimit の設定を確認しましたか? Linux 上のサーバーの場合、デフォルトではかなり低くなっています。「ulimit -n」で確認できます。1024 より大きい値に設定します。

于 2013-06-07T07:46:36.623 に答える