代码之家  ›  专栏  ›  技术社区  ›  Andrey Adamovich

什么是weblogic.socket.muxer?

  •  11
  • Andrey Adamovich  · 技术社区  · 15 年前

    你们中有人知道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 回复  |  直到 15 年前
        1
  •  9
  •   Pascal Thivent    15 年前

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

    WebLogic服务器使用软件模块 调用muxers读取传入 服务器上的请求和传入的请求 对客户端的响应。这些杂种 有两种主要类型:Java muxer或本地muxer。

    Java MuxER具有以下内容 特点:

    • 使用纯Java从套接字读取数据。
    • 它也是RMI客户机唯一可用的muxer。
    • 阻止读取,直到有数据要从套接字读取。当有大量的套接字和/或数据很少到达时,这种行为不能很好地扩展。 在插座上。对于客户机来说,这通常不是问题,但它可能会为服务器造成巨大的瓶颈。

    本地muxer使用特定于平台的 要从中读取数据的本机二进制文件 插座。大多数平台 提供一些机制来轮询 数据插座。例如,Unix 系统使用投票系统和 Windows体系结构使用完成 端口。本地提供高级 可扩展性,因为它们实现了 无阻塞线程模型。当A 使用本机muxer,服务器 创建固定数量的线程 专用于读取传入 请求。BEA建议使用 为选择的默认设置 Enable Native IO 参数哪个 允许服务器自动 为选择合适的muxer 服务器使用。

    如果 启用本机IO 参数是 未选择,服务器实例 专门使用Java MuxER。这个 如果有一个小的 客户数量和费率 哪些请求到达服务器是 相当高。在这些条件下, Java MuxER执行以及 本地MUXER和消除Java母语 接口(JNI)开销。不像 本机muxers,线程数 用于读取请求是不固定的,并且 可用于Java多路复用器的可调 配置 Percent Socket Readers 中的参数设置 管理控制台。参见 Changing the Number of Available Socket Readers .理想情况下,您应该配置 这个参数所以 线程大致等于 远程并发连接的客户端 高达线程池总数的50% 尺寸。每个线程等待一个固定的 数据变为 在插座上可用。如果没有数据 到了,线移动到下一个 插座。

    然后,出于这些原因,显然最好使用本地muxer。

    这里,看起来您使用的是默认的本地muxer( weblogic.socket.EPollSocketMuxer ),而不是Java MUXER( weblogic.socket.SocketMuxer) .

        2
  •  7
  •   Andrey Adamovich    15 年前

    我找到了 this link 这很好地解释了这种情况:

    socket muxer管理服务器 现有插座连接。它首先 确定哪些套接字有传入的 等待处理的请求。它 然后读取足够的数据来确定 协议和分配套接字 基于适当的运行时层 在协议上。在运行时层中, 套筒muxer螺纹决定 要使用的执行线程队列 并相应地委托请求。

        3
  •  4
  •   skaffman    15 年前

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

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

    几乎可以肯定,这是没有理由担心的。如果你看岩石下面,你一定会发现下面有一些丑陋的东西在阳光下向你眨眼。

    推荐文章