&引用;java.lang.NullPointerException“;出现在netty4测试过程中

&引用;java.lang.NullPointerException“;出现在netty4测试过程中,java,netty,Java,Netty,我只是想测试netty4支持的TCP持久连接的数量。当数量达到1337时,一个新的信息出现在客户端,如下所示 位于的java.lang.NullPointerException setUpdateEvents(EPollArrayWrapper.java:178) 在sun.nio.ch.EPollArrayWrapper.add(EPollArrayWrapper.java:227)中 sun.nio.ch.EPollSelectorImpl.implRegister(EPollSelect

我只是想测试netty4支持的TCP持久连接的数量。当数量达到1337时,一个新的信息出现在客户端,如下所示


位于的java.lang.NullPointerException setUpdateEvents(EPollArrayWrapper.java:178) 在sun.nio.ch.EPollArrayWrapper.add(EPollArrayWrapper.java:227)中 sun.nio.ch.EPollSelectorImpl.implRegister(EPollSelectorImpl.java:164) 在sun.nio.ch.SelectorImpl.register(SelectorImpl.java:133)中 java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:209) 在 io.netty.channel.nio.AbstractNioChannel.doRegister(AbstractNioChannel.java:285) 在 io.netty.channel.AbstractChannel$AbstractSafe.register0(AbstractChannel.java:438) 在 io.netty.channel.AbstractChannel$AbstractSafe.access$100(AbstractChannel.java:373) 在 io.netty.channel.AbstractChannel$AbstractSafe$1.run(AbstractChannel.java:417) 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:348)中 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) 运行(Thread.java:724)


客户端代码为:


ClientDisConnectListener是:

public class ClientConnectListener implements ChannelFutureListener {

    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        Channel ch= future.channel();

        NetMessage.Builder msgBuilder = NetMessage.newBuilder();
        msgBuilder.setMessageType(100);

        System.out.println("-------client send netMsg ----------");
        ch.writeAndFlush(msgBuilder.build());

    }
}
public class ClientDisConnectListener implements ChannelFutureListener {

    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        System.out.println("-------  disconnect-----------");
    }

}
客户端jvm参数:

/usr/java/jdk1.7.0_40/bin/java-Xms4G-Xmx4G-XX:NewSize=3584m -XX:PermSize=64m-XX:surviorratio=1-XX:+UseParallelGC-XX:-UseAdaptiveSizePolicy-classpath.“/bin:./lib/”com.test.protobuf.client.HSFTCPClient****(ip)10007 10000

Linux信息:任务:总共374个,1个正在运行,373个正在睡眠,0个已停止, 0僵尸Cpu0:0.3%us,0.7%sy,0.0%ni,99.0%id,0.0%wa,0.0%hi, 1:0.3%美国,0.0%sy,0.0%ni,99.7%中国,99.7%印度,99.7%中国,99.7%美国,99.7%id,99.7%id,99.7%美国,0.0%中国,0.0%中国,0.0%中国,0.0.0%印度,99.7%国家,99.7%id,99.7%id,99.7%id,99.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%id,0.7%政府,0.7%政府,0.7%id,0.7%id,0.7%id,0.0.7%政府,0.7%政府,0.7%政府,id,0.0%wa,0.0%hi,0.0%si,0.0%st Cpu5:0.0%us,0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st Cpu6:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st Cpu7:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0.0%si、, 0.0%st Mem:32865072k总计、2735996k使用、30129076k空闲、345764k缓冲区交换:35110904k总计、0k使用、35110904k空闲、, 1362400k缓存jdk版本:java版本“1.7.0_40”java(TM)SE 运行时环境(build 1.7.0_40-b43)Java热点(TM)64位 服务器虚拟机(构建24.0-b56,混合模式)

如何修复该错误?并调整客户端代码


我真的希望Netty能够在一台服务器上保持至少50000个TCP连接。

这很有趣。。。你能打开一个bugreport并添加如何复制它的信息吗。谢谢

经过更多的研究,我找到了根本原因,并为JDK提供了补丁。因此,要缩短它,它是一个JDK错误

见:

public class HSFTCPClientHandler extends SimpleChannelInboundHandler<NetMessage> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, NetMessage msg)
            throws Exception {
          if(msg==null){
              return;
          }
          int msgType = msg.getMessageType();
          switch (msgType) {
              case 200:

            break;
        }

    }


     @Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {

           Channel ch = ctx.channel();

           ChannelFuture future=  ctx.newSucceededFuture().addListener(new ClientConnectListener());
        }


    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {

           ctx.fireChannelInactive();
           ctx.disconnect().addListener(new ClientDisConnectListener());
    }

}
public class ClientConnectListener implements ChannelFutureListener {

    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        Channel ch= future.channel();

        NetMessage.Builder msgBuilder = NetMessage.newBuilder();
        msgBuilder.setMessageType(100);

        System.out.println("-------client send netMsg ----------");
        ch.writeAndFlush(msgBuilder.build());

    }
}
public class ClientDisConnectListener implements ChannelFutureListener {

    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        System.out.println("-------  disconnect-----------");
    }

}