weblogic.socket.Muxer использует 100% процессор

Недавно мы начали испытывать развертывания в Weblogic 12c с помощью утилиты weblogic.Deployer. Мы можем нормально развернуть EAR, но всякий раз, когда мы пытаемся отменить развертывание этого приложения, когда управляемый сервер все еще работает, оно начнет использовать 100% нашего ЦП (4-ядерный Xeon, голое железо).

После некоторой переделки и бесчисленных дампов потоков мы смогли изолировать проблему на 4 зависших потоках. Каждый из них потреблял 100% ресурсов ядра. Средняя нагрузка подскочит с 0,10 до 4,00 максимум за 5 минут.

Это темы, которые, кажется, застряли:

"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

Почему select() потребляет так много процессорного времени в моей программе?

Я не думаю, что это могло произойти из-за старой версии 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, в чем может быть причина этой проблемы?

Большое спасибо!


person Gustavo Ramos    schedule 22.02.2015    source источник


Ответы (3)


Я столкнулся с той же проблемой. Мне удалось решить эту проблему, используя следующие настройки:

<сильный>1. Использование мультиплексора posix:

set('MuxerClass', 'weblogic.socket.PosixSocketMuxer')

См. раздел настройка веб-логики.

<сильный>2. Добавьте аргументы запуска:

-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -DUseSunHttpHandler=true
  • sun.nio.ch.PollSelectorProvider использует linux poll вместо epoll_wait

  • -DUseSunHttpHandler=true обходит, используя реализацию http-сокета weblogic

person Omar MEBARKI    schedule 25.07.2016

После долгих возни, почти бессонной ночи и гугления до крови, я почти уверен, что решил проблему.

Это решение в значительной степени основано на другом потоке: https://stackoverflow.com/a/7827952/1484232.

Подводя итог всему этому, столкновение потоков GC (скорее всего) вызывало здесь проблемы. После применения некоторых параметров к моей виртуальной машине проблема была решена волшебным образом.

-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
-XX:ParallelCMSThreads=2 
-XX:+CMSParallelRemarkEnabled 
-XX:+CMSIncrementalMode 
-XX:+CMSIncrementalPacing 
-XX:CMSFullGCsBeforeCompaction=1 
-XX:+CMSClassUnloadingEnabled 
-XX:CMSInitiatingOccupancyFraction=80

Если у кого-то когда-нибудь возникнет такая же проблема, это можно использовать как попытку снова заставить все работать.

Ваше здоровье.

person Gustavo Ramos    schedule 23.02.2015
comment
У меня та же проблема, но эти настройки не имеют значения (мне кажется, они делают это еще хуже). - person NeplatnyUdaj; 12.02.2016
comment
Привет @NeplatnyUdaj ... пробег, кажется, варьируется от случая к случаю. Кажется, что NIO плохо реализован в Weblogic 12c. Однако мы не видели этих проблем в версии 12.1.3, поэтому стоит попробовать. Может быть, даже 12.1.4, которая новее. Удачи. - person Gustavo Ramos; 15.02.2016
comment
Я изменил начало веб-логики JDK с 1.7.0_25 на 1.8.0_60, и пока все хорошо. - person NeplatnyUdaj; 15.02.2016
comment
@NeplatnyUdaj здорово! Я использую 1.7.0_62. 1.8 у меня в расписании. Надеюсь, это решит для вас. - person Gustavo Ramos; 16.02.2016

Это известная проблема с Weblogic 12c, и она опубликована в виде следующего документа службы поддержки Oracle:

Проблема с производительностью из-за использования weblogic.socket.NIOSocketMuxer в WLS 12.1.2+ (идентификатор документа 2128032.1) (ссылка)

Предлагаемый обходной путь — переключиться на использование класса Native Muxer, как описано в ответе Омара МЕБАРКИ.

В статье не рассматриваются какие-либо другие обходные пути, упомянутые в других ответах здесь.

person Mike    schedule 10.05.2017