堆栈信息:
"I/O dispatcher 16" #137 prio=5 os_prio=0 tid=0x000000002139f000 nid=0x58d0 runnable [0x000000002e58f000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000007233c01e0> (a sun.nio.ch.Util$3)
- locked <0x00000007233c01d0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000007233c01f0> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:255)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
at java.lang.Thread.run(Thread.java:748)
在windows的环境下。调用selector.select(); java nio在windows存在bug,当没有连接进来时,可能也会返回。这样selector.select()根本没有阻塞,会一直反复执行,导致CPU飙升。
具体讨论见: https://github.com/eclipse/jetty.project/issues/2205
现在已经给oracle jdk团队反馈了这个问题,详见https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8255627