Что такое weblogic.socket.Muxer? - PullRequest
11 голосов
/ 26 октября 2009

Кто-нибудь из вас понимает, что weblogic.socket.Muxer используется в WebLogic 8.1?

Часто в дампах потоков я вижу следы стека, подобные этому:

"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" id=20 idx=0x68 tid=26709 prio=5 alive, in native, blocked, daemon
    -- Blocked trying to get lock: java/lang/String@0x2b673d373c50[fat lock]
    at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method)
    at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1675)[optimized]
    at jrockit/vm/Locks.lockFat(Locks.java:1776)[optimized]
    at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1312)[optimized]
    at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1259)[optimized]
    at jrockit/vm/Locks.monitorEnter(Locks.java:2439)[optimized]
    at weblogic/socket/EPollSocketMuxer.processSockets(EPollSocketMuxer.java:153)
    at weblogic/socket/SocketReaderRequest.run(SocketReaderRequest.java:29)
    at weblogic/socket/SocketReaderRequest.execute(SocketReaderRequest.java:42)
    at weblogic/kernel/ExecuteThread.execute(ExecuteThread.java:145)
    at weblogic/kernel/ExecuteThread.run(ExecuteThread.java:117)
    at jrockit/vm/RNI.c2java(JJJJJ)V(Native Method)
    -- end of trace

Дело не в том, что у меня есть какие-то проблемы, просто интересно понять:

1) что он делает?
2) это может повлиять на производительность?

Ответы [ 3 ]

9 голосов
/ 26 октября 2009

Из документации (http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246):

WebLogic Server использует программные модули называется муксеры, чтобы читать входящие запросы на сервер и входящие отзывы на клиента. Эти муксеры имеют два основных типа: Java muxer или родной muxer.

Java muxer имеет следующее Характеристики:

  • Использует чистую Java для чтения данных из сокетов.
  • Это также единственный мультиплексор, доступный для клиентов RMI.
  • Блокирует чтение до тех пор, пока нет данных для чтения из сокета. Это поведение плохо масштабируется при большом количестве сокетов и / или когда данные поступают нечасто в розетки. Обычно это не проблема для клиентов, но это может создать огромное узкое место для сервера.

Нативные мультиплексоры используют платформо-зависимые родные двоичные файлы для чтения данных из Розетки. Большинство всех платформ предоставить некоторый механизм для опроса сокет для данных. Например, Unix Системы используют систему опроса и Архитектура Windows использует завершение порты. Родной обеспечивают превосходный масштабируемость, потому что они реализуют неблокирующая модель резьбы. Когда используется родной муксер, сервер создает фиксированное количество потоков посвященный чтению входящих Запросы. BEA рекомендует использовать настройка по умолчанию для выбранного Enable Native IO параметр, который позволяет серверу автоматически выбирает подходящий глушитель для сервер для использования.

Если параметр Enable Native IO не выбран, экземпляр сервера исключительно использует Java muxer. это может быть приемлемым, если есть маленький количество клиентов и ставка на какие запросы поступают на сервер достаточно высокий. В этих условиях Java Muxer работает так же, как родной мультиплексор и устранение Java Native Затраты интерфейса (JNI). В отличие от родные муксеры, количество потоков используется для чтения запросов не является фиксированной и настраивается для Java muxers настройка Percent Socket Readers настройка параметров в Консоль администрирования. Смотрите Изменение Количество доступных розеток Читатели . В идеале вы должны настроить этот параметр, так что количество темы примерно равно числу удаленные одновременно подключенные клиенты до 50% от общего пула потоков размер. Каждый поток ожидает фиксированного количество времени для данных, чтобы стать доступны в розетке. Если нет данных приходит, поток движется к следующему розетка.

Тогда, по этим причинам, очевидно, лучше использовать нюксеры.

Здесь, похоже, вы используете собственный мультиплексор по умолчанию (weblogic.socket.EPollSocketMuxer), а не мультиплексор Java (weblogic.socket.SocketMuxer).

)
7 голосов
/ 26 октября 2009

Я нашел эту ссылку , которая в значительной степени объяснила ситуацию:

Сокет Muxer управляет сервером существующие сокетные соединения. Это первое определяет, какие сокеты имеют входящие запросы, ожидающие обработки. Это затем читает достаточно данных, чтобы определить протокол и отправляет сокет на соответствующий уровень времени выполнения на основе по протоколу. В слое времени выполнения, Гнезда мультиплексора определяют которые выполняют очередь потока, которая будет использоваться и соответственно делегирует запрос.

4 голосов
/ 26 октября 2009

Для любого сервера приложений дамп потока покажет вам сотни, если не тысячи фоновых потоков. Эти серверы - сложные звери, и эти потоки - просто фон, выполняющий свою работу.

«Мультиплексор» - это мультиплексор, который представляет собой механизм объединения нескольких потоков данных в один канал. Weblogic будет использовать их для обмена данными с самим собой или с другими узлами в кластере. В любой момент некоторые из них будут «заблокированы», поскольку им нечего делать.

Это почти наверняка не повод для беспокойства. Если вы посмотрите под скалу, вы непременно найдете под ней несколько мерзких вещей, моргающих на солнце.

...