0

我想在服务器上打开 2 个端口,1 个用于生产,2 个用于监控,1 个客户端用于远程登录到另一台服务器。但是我的服务器在运行最多 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 回答