tomcat开启后过一段时间CPU占用高达60-70%。
百度了一下,很多人都说在JavaStack查看,下面是jstack里面占用高的几个线程信息
"ajp-nio-8009-ClientPoller-1" #55 daemon prio=5 os_prio=0 tid=0x000000001e51d000 nid=0x93e4 runnable [0x0000000028ade000]
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 <0x00000000934c46b0> (a sun.nio.ch.Util$2)
- locked <0x00000000934c46a0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000934c4530> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:710)
at java.lang.Thread.run(Thread.java:745)
Locked ownable synchronizers:
- None
"NioBlockingSelector.BlockPoller-2" #16 daemon prio=5 os_prio=0 tid=0x000000001bdbe000 nid=0xa124 runnable [0x000000001d8df000]
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 <0x000000009192fb18> (a sun.nio.ch.Util$2)
- locked <0x000000009192fb08> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000009192f9a8> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298)
Locked ownable synchronizers:
- None
别人找到的都是自己代码里的类,通过分析异常信息,找出死锁代码,但是我这个 at 的都是jar包里的类,怎么分析啊,各位?
没遇到过, 提供几个排查点吧. 看下java版本、多打印几次线程堆栈, 确认只是偶然进入到了这个方法还是几乎每次都在这个方法里, 重启几次, 确认下是不是每次都是这些线程消耗CPU.
从你给出的线程来看, 可能是select方法比较消耗CPU, 可以查下是不是jdk或者tomcat的bug.
比如 java nio的一个严重BUG,导致cpu 100% 或者 JAVA NIO存在的问题