千家信息网

服务器异常问题怎么解决

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,本篇内容介绍了"服务器异常问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!服务背景:流数据
千家信息网最后更新 2024年11月12日服务器异常问题怎么解决

本篇内容介绍了"服务器异常问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

服务背景:

流数据接收--> 解析过滤-->调用socket服务 写入mina服务。

服务器异常日志:

java.io.IOException: Too many open files Failed to open a selectorFailed to create a new instance of org.apache.mina.transport.socket.nio.NioProcessor:null

定位到问题代码:

 public void init() {    NioSocketConnector connector = new NioSocketConnector();    connector.getFilterChain().addLast("codec",        new ProtocolCodecFilter(new TextLineCodecFactory(Charset.defaultCharset())));    connector.setConnectTimeoutMillis(10000);    connector.setHandler(new SocketClientHandler());    connector.getSessionConfig().setReceiveBufferSize(10240); // 设置接收缓冲区的大小    connector.getSessionConfig().setSendBufferSize(10240);// 设置输出缓冲区的大小    ConnectFuture cf = connector.connect(        new InetSocketAddress(socketConfig.getSocketServerIp(),            socketConfig.getSocketServerPort()));    // 等待连接创建完成    cf.awaitUninterruptibly();    session = cf.getSession();  }

问题产生原因:
当mina服务端长时间连接不上 ,并发连接特别多的时候 都会导致上述问题。
解决方案:当连接不成功的时候 进行施放句柄。

修改之后:

 public void init() {    NioSocketConnector connector = new NioSocketConnector();    connector.getFilterChain().addLast("codec",        new ProtocolCodecFilter(new TextLineCodecFactory(Charset.defaultCharset())));    connector.setConnectTimeoutMillis(10000);    connector.setHandler(new SocketClientHandler());    connector.getSessionConfig().setReceiveBufferSize(10240); // 设置接收缓冲区的大小    connector.getSessionConfig().setSendBufferSize(10240);// 设置输出缓冲区的大小    ConnectFuture cf = connector.connect(        new InetSocketAddress(socketConfig.getSocketServerIp(),            socketConfig.getSocketServerPort()));    // 等待连接创建完成    cf.awaitUninterruptibly();    if (cf.isDone()) {      if (!cf.isConnected()) {        log.error("fail connect {} {}", socketConfig.getSocketServerIp(),            socketConfig.getSocketServerPort());        connector.dispose();        throw new RuntimeException("Not connect to Mina Server");      } else {        session = cf.getSession();      }    }  }

"服务器异常问题怎么解决"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0