Was ist weblogic.socket.Muxer?
-
06-07-2019 - |
Frage
Hat jemand von euch verstehen, was weblogic.socket.Muxer in WebLogic verwendet wird 8.1?
Oft in Thread-Dumps Ich sehe Stapel Spuren ähnlich wie folgt aus:
"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
Es ist nicht, dass ich damit keine Probleme haben, es ist intresting nur zu verstehen:
1), was es tut?
2) kann er jede Leistung beeinträchtigen?
Lösung
Aus der Dokumentation ( http: // download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246 ):
WebLogic Server verwendet Software-Module genannt Muxer eingehenden zu lesen Anfragen auf dem Server und eingehende Antworten auf dem Client. Diese Muxer Es gibt zwei Haupttypen: die Java muxer oder native muxer.
Ein Java muxer hat folgende Merkmale:
- Verwendet reine Java-Daten aus Sockets zu lesen.
- Es ist auch die einzige muxer für RMI-Clients.
- Blocks auf liest, bis Daten von einem Socket zu lesen ist. Dieses Verhalten tritt nicht gut skalieren, wenn es eine große Anzahl von Steckdosen und / oder wenn Daten ankommen selten an den Buchsen. Dies ist in der Regel kein Problem für Kunden, aber es kann einen großen Engpass für einen Server erstellen.
Native Muxer verwenden plattformspezifische nativen Binärdateien Daten lesen aus Steckdosen. Die Mehrheit aller Plattformen bietet einen Mechanismus zur Abstimmung eines Buchse für Daten. Zum Beispiel Unix Systeme nutzen die Umfrage-System und die Windows-Architektur verwendet Abschluss Häfen. Einheimische bieten überlegen Skalierbarkeit, weil sie eine Umsetzung nicht blockierend Thread-Modell. Wenn ein nativen muxer verwendet wird, der Server erzeugt eine feste Anzahl von Threads zu lesen eingehende gewidmet Anfragen. BEA empfiehlt die Verwendung von Standardeinstellung für die ausgewählte von
Enable Native IO
Parameter, kann der Server automatisch wählt die geeignete muxer für die Server zu verwenden.Wenn der
Enable Native IO
Parameter die Serverinstanz nicht ausgewählt ist, ausschließlich verwendet die Java muxer. Diese vielleicht akzeptabel, wenn es ein kleines ist Anzahl der Clients und die Rate, mit die Anfragen kommen an dem Server ziemlich hoch. Unter diesen Umständen, die Java muxer führt sowie eine nativen muxer und beseitigen Java Native Interface (JNI) Overhead. nicht wie nativer Muxer, die Anzahl der Threads verwendet, um Anforderungen zu lesen ist nicht festgelegt und abstimmbar ist für Java Muxer durch Konfigurieren desPercent Socket Readers
Parametereinstellung in der Administrationskonsole. Siehe ändern Die Anzahl der verfügbaren Sockel Leser . Im Idealfall sollten Sie konfigurieren diese Parameter, so dass die Anzahl der Fäden entspricht in etwa der Anzahl der Fern gleichzeitig verbundene Clients bis zu 50% des gesamten Thread-Pools Größe. Jeder Thread wartet auf einen festen Zeitaufwand für die Daten werden an einer Steckdose zur Verfügung. Wenn keine Daten der Faden bewegt sich zum nächsten kommt, Buchse.
Dann aus diesen Gründen, es ist offensichtlich besser nativer Muxer zu verwenden.
Hier sieht es aus wie Sie die Standard-nativen muxer (weblogic.socket.EPollSocketMuxer
) verwenden, nicht die Java muxer (weblogic.socket.SocketMuxer)
.
Andere Tipps
Ich habe gefunden, Link , die die Situation ziemlich erklärt:
Der Socket-Muxer verwaltet die Server bestehende Socket-Verbindungen. es zuerst bestimmt, welche Buchsen eingehende haben Warte Anfragen verarbeitet zu werden. Es dann liest genügend Daten, um zu bestimmen Das Protokoll und sendet die Buchse auf eine geeignete Laufzeitschicht basierend auf dem Protokoll. In der Laufzeitschicht, die Buchse muxer Fäden bestimmen das Ausführen Fadenwarteschlange verwendet werden und delegiert die Anfrage entsprechend.
Für jeden gegebenen Anwendungsserver, ein Thread-Dump finden Sie Hunderte zeigt, wenn nicht Tausende von Hintergrund-Threads. Diese Server sind komplexe Tiere und diese Fäden sind nur der Hintergrund Sanitär seine Arbeit zu tun.
A „muxer“ ist ein Multiplexer, der zum Kombinieren von mehreren Datenströmen auf einen einzelnen Kanal einen Mechanismus ist. Weblogic werden diese zum Austausch von Daten mit sich selbst oder mit anderen Knoten im Cluster werden. Zu jedem gegebenen Zeitpunkt wird eine Reihe von denen sein „blockiert“, da sie nichts zu tun haben.
Es ist mit ziemlicher Sicherheit kein Grund zur Besorgnis. Wenn Sie unter dem Felsen suchen, sind Sie verpflichtet, ein paar hässlichen Dinge unter Blinken bis auf Sie in der Sonne zu finden.