Search This Blog

2013-10-14

jdk7u40的一个nio bug

测试用的服务端程序跟客户端程序都用了NIO,测试的时候发现都有一个问题:一旦连接达到19000多,一直抛出一个异常:
at sun.nio.ch.EPollArrayWrapper.setUpdateEvents(EPollArrayWrapper.java:178)
at sun.nio.ch.EPollArrayWrapper.add(EPollArrayWrapper.java:227)
at sun.nio.ch.EPollSelectorImpl.implRegister(EPollSelectorImpl.java:164)
at sun.nio.ch.SelectorImpl.register(SelectorImpl.java:133)
at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:209)
这是在服务器上测试,之前在本机测试的时候就没问题,本机用的JDK版本要旧一些,怀疑是这个版本的JDK有问题。发现已经有人提了这个问题:Regression in EPollArrayWrapper causes NPE when fd > 64 * 1024 - Author: Norman Maurer - web.archiveorange.com。准备用旧一点的JDK。

7u40之前的版本是7u25,Oracle的JDK下载页面没有7u25了,不过他们的服务器上还有这个文件,可以下载到,方法如下:
  1. 在下载页面接受下载协议。
  2. 刷新页面,用Firebug或者类似的工具获得HTTP请求里的Cookie值,替换下面命令里的{cookie}。
  3. 在*nix下运行命令wget --no-check-certificate --header="Cookie: {cookie}" download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-x64.rpm

经过测试,7u25确实没有上面提到的问题。

=文章版本=

20131014

No comments:

Post a Comment