我们最近开始尝试使用
weblogic.Deployer
工具在Weblogic 12c中进行部署。我们可以成功部署EAR,但是每当我们尝试在仍在运行的托管服务器上取消部署该应用程序时,它将开始使用100%的CPU(4核Xeon,裸机)。
经过一些调整和无数线程转储,我们可以将问题隔离在4个卡住的线程上。其中每个线程都会在一个核心上消耗100%。负载平均值将在5分钟内从约0.10跳至4.00左右。
这些似乎被卡住的线程如下:
"ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00007fb52801c800 nid=0x6bf0 runnable [0x00007fb58a0ad000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x00000000e18c66d0> (a sun.nio.ch.Util$2)
- locked <0x00000000e18c66c0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e18c6598> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:102)
at weblogic.socket.NIOSocketMuxer.selectFrom(NIOSocketMuxer.java:541)
at weblogic.socket.NIOSocketMuxer.processSockets(NIOSocketMuxer.java:470)
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)
我看到很多人遇到了同样的问题(虽然不是关于Weblogic的):
https://github.com/netty/netty/issues/327
https://issues.jboss.org/browse/XNIO-172
我认为这不可能是因为旧版JDK的原因。java -version
显示:
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
我在谷歌上搜索了一下,但没有找到任何相关信息。WL专家们知道这个问题的原因吗?
非常感谢!