weblogic.socket.Muxer 使用 100% cpu
Posted
技术标签:
【中文标题】weblogic.socket.Muxer 使用 100% cpu【英文标题】:weblogic.socket.Muxer uses 100% cpu 【发布时间】:2015-02-22 20:17:40 【问题描述】:我们最近开始使用 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
Why does select() consume so much CPU time in my program?
我认为这不会因为旧的 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 专家知道导致此问题的原因是什么吗?
非常感谢!
【问题讨论】:
【参考方案1】:我遇到了同样的问题。 我设法通过使用以下设置来解决它:
1.使用 posix 复用器:
set('MuxerClass', 'weblogic.socket.PosixSocketMuxer')
见Weblogic tunning
2。添加启动参数:
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -DUseSunHttpHandler=true
sun.nio.ch.PollSelectorProvider 使用 linux poll 而不是 epoll_wait
-DUseSunHttpHandler=true 使用 weblogic http 套接字实现绕过
【讨论】:
【参考方案2】:经过多次修补、几乎不眠之夜和谷歌搜索直到流血,我几乎可以肯定我已经解决了。
此解决方案严重基于另一个线程:https://***.com/a/7827952/1484232
总结整个 shebang,GC 线程冲突(很可能)导致了这里的问题。在我的虚拟机上应用了一些参数后,它神奇地解决了。
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:ParallelCMSThreads=2
-XX:+CMSParallelRemarkEnabled
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CMSFullGCsBeforeCompaction=1
-XX:+CMSClassUnloadingEnabled
-XX:CMSInitiatingOccupancyFraction=80
如果有人遇到过同样的问题,这可以用来尝试让事情恢复正常。
干杯。
【讨论】:
我也遇到了同样的问题,但是这些设置没有任何区别(我的感觉是,它们更糟)。 嗨@NeplatnyUdaj...里程似乎因情况而异。似乎 NIO 在 Weblogic 12c 中没有很好地实现。不过,我们在 12.1.3 版本上没有看到这个问题,所以尝试一下可能是个好主意。甚至可能是更新的 12.1.4。祝你好运。 我已将 JDK weblogic 从 1.7.0_25 更改为 1.8.0_60,到目前为止一切顺利。 @NeplatnyUdaj 太棒了!我使用 1.7.0_62。 1.8 在我的日程表上。希望它能为你解决。【参考方案3】:这是 Weblogic 12c 的一个已知问题,并作为以下 Oracle 支持文档发布:
由于在 WLS 12.1.2+(文档 ID 2128032.1)中使用 weblogic.socket.NIOSocketMuxer 导致的性能问题 (link)
提供的解决方法是切换到使用 Native Muxer 类,如 Omar MEBARKI 的回答中所述。
本文未解决此处其他答案中提到的任何或其他解决方法。
【讨论】:
以上是关于weblogic.socket.Muxer 使用 100% cpu的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)