JDK NIO SelectionKey bug
Posted 自强不息 厚德载物
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK NIO SelectionKey bug相关的知识,希望对你有一定的参考价值。
此bug项目中使用elasticSearch中出现的,原因是,nio事件选择器,在特性内核下以及jdk6版本中,出现不hold线程,死循环获取事件的bug,导致cup使用率过高;
此bug在官网已被修复:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933
如果不升级版本,
System.setProperty(“org.elasticsearch.common.netty.epollBugWorkaround”,true); 增加此句代码。
官网修复解决:取消了选择器,创建一个新的。
if (SelectionKey != null) { // the key you registered on the temporary selector SelectionKey.cancel(); // cancel the SelectionKey that was registered with the temporary selector // flush the cancelled key temporarySelector.selectNow(); } which is safe. Now everything works fine.
以上是关于JDK NIO SelectionKey bug的主要内容,如果未能解决你的问题,请参考以下文章
java的nio包的SelectionKey,Selector,SelectableChannel三者的缠绵关系概述
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)