什么是weblogic.socket.Muxer?

时间:2009-10-26 08:42:26

标签: java sockets weblogic weblogic8.x muxer

您是否了解WebLogic 8.1中使用的weblogic.socket.Muxer是什么?

通常在线程转储中,我看到类似于此的堆栈跟踪:

"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 个答案:

答案 0 :(得分:9)

从文档(http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246):

  

WebLogic Server使用软件模块   称为muxers来读取传入   服务器和传入的请求   对客户的回应。这些复用器   有两种主要类型:Java   muxer或native muxer。

     

Java muxer具有以下功能   特性:

     
      
  • 使用纯Java从套接字读取数据。
  •   
  • 它也是RMI客户端唯一可用的复用器。
  •   
  • 阻止读取,直到有数据要从套接字读取。当存在大量套接字和/或数据不经常到达时,此行为无法很好地扩展   在插座上。这通常不是客户端的问题,但它可能会给服务器带来巨大的瓶颈。
  •   
     

本机复用器使用特定于平台的   从中读取数据的本机二进制文件   插座。大多数平台   提供一些轮询的机制   数据套接字。例如,Unix   系统使用民意调查系统和   Windows体系结构使用完成   端口。本土提供优越   可伸缩性因为它们实现了   非阻塞线程模型。当一个   使用本机muxer,服务器   创建固定数量的线程   致力于阅读传入   要求。 BEA建议使用   为。选择的默认设置   Enable Native IO参数   允许服务器自动   选择适当的复用器   要使用的服务器。

     

如果Enable Native IO参数是   未选中,服务器实例   专门使用Java muxer。这个   如果有一个小的可能是可以接受的   客户数量和费率   哪些请求到达服务器是   相当高。在这种情况下,   Java muxer和a。一样   本机muxer并消除Java Native   接口(JNI)开销。不像   本机复用器,线程数   用于读取请求不是固定的   是可调的Java复用器   配置Percent Socket Readers   参数设置   管理控制台。见Changing the Number of Available Socket Readers。理想情况下,您应该配置   这个参数的数量如此   线程大致等于数量   远程并发连接的客户端   高达总线程池的50%   尺寸。每个线程都等待一个固定的   数据成为的时间量   可在插座上使用。如果没有数据   到了,线程移动到下一个   插座。

然后,由于这些原因,使用本机复用器显然更好。

在这里,看起来您使用的是默认的本机复用程序(weblogic.socket.EPollSocketMuxer),而不是Java复用程序(weblogic.socket.SocketMuxer)

答案 1 :(得分:7)

我发现this link几乎解释了这种情况:

  

套接字Muxer管理服务器   现有套接字连接。它首先   确定哪些套接字有来电   请求等待处理。它   然后读取足够的数据来确定   协议并调度套接字   到适当的运行时层   在协议上。在运行时层中,   套接字muxer线程确定   执行要使用的线程队列   并相应地委托请求。

答案 2 :(得分:4)

对于任何给定的应用程序服务器,线程转储将向您显示数百个(如果不是数千个)后台线程。这些服务器是复杂的野兽,这些线程只是后台管道工作。

“muxer”是一种多路复用器,它是将多个数据流组合到单个通道上的机制。 Weblogic将使用它们与自身或群集中的其他节点交换数据。在任何时候,其中一些将被“阻止”,因为它们无关。

这几乎肯定不值得关注。如果你在岩石下面看,你必定会在阳光下眨眼看到一些丑陋的东西。