2017-03-16 13 views
1

パイプラインの末尾に達し、今はサーバーコードが例外を生成しており、何が起こっているのか理解できません。ネッティー:WARNING:exceptionCaught()イベントが発生し、それが増加している、私はそれがクライアントの罰金が、最後の数日間の負荷を働いていた複数のクライアントに対処する私のクライアントにサービスを書いた

私のコードは次のとおりです。

public void run() throws Exception { 

    //System.setProperty("org.jboss.netty.epollBugWorkaround", "true"); 
    EventLoopGroup bossPool = new NioEventLoopGroup(BOSS_THREADS); 
    EventLoopGroup workerPool = new NioEventLoopGroup(MAX_WORKER_THREADS); 

    try { 

     ServerBootstrap boot = new ServerBootstrap(); 
     boot.group(bossPool, workerPool); 
     boot.channel(NioServerSocketChannel.class); 
     boot.childHandler(new Pipeline()); 
     boot.option(ChannelOption.TCP_NODELAY, true); 
     boot.option(ChannelOption.SO_KEEPALIVE, true); 
     boot.option(ChannelOption.SO_REUSEADDR, true); 
     boot.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 6000); 
     boot.option(ChannelOption.SO_TIMEOUT, 6); 
     boot.option(ChannelOption.SO_BACKLOG, 2048); 

     //System.out.println("Server started listening at port : " + port); 
     boot.bind(port).sync().channel().closeFuture().sync(); 

    } catch (InterruptedException e) { 
    } finally { 
     workerPool.shutdownGracefully(); 
     bossPool.shutdownGracefully(); 
    } 
} 

パイプラインのコードは次のとおりです。

public class Pipeline extends ChannelInitializer<Channel> { 
    @Override 
    protected void initChannel(Channel ch) throws Exception { 
     // ch.pipeline().addLast("joiner", new JoinRequest()); 
     ch.pipeline().addLast("decoder", new ByteArrayDecoder()); 
     ch.pipeline().addLast("encoder", new StringEncoder()); 
     ch.pipeline().addLast("myHelper", new RequestHandler()); 
     } 
    } 

、ここでは、私が日常的に取得しています詳細なエラーログです:

1006465:54:21:10-16-03-2017Mar 16, 2017 10:21:54 AM   io.netty.channel.DefaultChannelPipeline$TailContext exceptionCaught 
WARNING: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. 
java.io.IOException: Too many open files 
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) 
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) 
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) 
    at io.netty.channel.socket.nio.NioServerSocketChannel.doReadMessages(NioServerSocketChannel.java:135) 
    at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:69) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:514) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:471) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:385) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:351) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
    at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412) 
    at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280) 
    at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877) 
    at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706) 
    at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661) 
    at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126) 

com.idea.builders.RequestHandler oprationSelector 
SEVERE: null 
java.io.FileNotFoundException: config.dat (Too many open files) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.idea.builders.RequestHandler.oprationSelector(RequestHandler.java:175) 
    at com.idea.builders.RequestHandler.messageReceived(RequestHandler.java:97) 
    at com.idea.builders.RequestHandler.messageReceived(RequestHandler.java:35) 
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
    at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:84) 
    at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:153) 
    at io.netty.channel.PausableChannelEventExecutor.invokeChannelRead(PausableChannelEventExecutor.java:86) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:389) 
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 
    at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:84) 
    at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:153) 
    at io.netty.channel.PausableChannelEventExecutor.invokeChannelRead(PausableChannelEventExecutor.java:86) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:389) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:956) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:127) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:514) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:471) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:385) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:351) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
    at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412) 
    at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280) 
    at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877) 
    at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706) 
    at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661) 
    at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126) 

Mar 16, 2017 10:21:54 AM com.idea.builders.RequestHandler oprationSelector 
SEVERE: null 
java.io.FileNotFoundException: config.dat (Too many open files) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.idea.builders.RequestHandler.oprationSelector(RequestHandler.java:175) 
    at com.idea.builders.RequestHandler.messageReceived(RequestHandler.java:97) 
    at com.idea.builders.RequestHandler.messageReceived(RequestHandler.java:35) 

は、私が何をすべき毎日サーバーを再起動する必要がありますか?

+0

あなたはあまりにも多くのファイルがシステム上のオープンハンドルを持っているので、このエラーがある、あなたが開いたファイルを閉じていることを確認し、あなたは、クライアントが接続を切断後、スレッド子を殺すために確認していますか? – zack6849

+0

はい、各スレッドが強制終了され、ファイルも閉じます。 –

+0

あなたはどのOSですか? – Nicholas

答えて

0

あなたのハンドラの1つでexceptionCaughtメソッドをオーバーライドする必要があります。

メッセージがネッティーcaugth例外がしかし、あなたはあなたのハンドラのいずれかでそれを処理しなかったことを意味します。例外は、最後のパイプラインハンドラに到達して消えます。あなたはおそらくあなたのリクエストハンドラでそれを処理する必要があります。

はい、ファイルの処理が終了したらすべてのストリームを閉じます。また、例外や登録されていないイベントでソケットやその他のリソースを解放する必要があります。

関連する問題