&引用;java.lang.NullPointerException“;出现在netty4测试过程中
我只是想测试netty4支持的TCP持久连接的数量。当数量达到1337时,一个新的信息出现在客户端,如下所示&引用;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
位于的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-----------");
}
}