Java 什么是weblogic.socket.Muxer?
你们是否了解weblogic 8.1中weblogic.socket.Muxer的用途 在线程转储中,我经常看到类似于以下内容的堆栈跟踪:Java 什么是weblogic.socket.Muxer?,java,sockets,weblogic,weblogic8.x,muxer,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@0x2b67
"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) 它会影响任何性能吗?对于任何给定的应用程序服务器,线程转储将显示数百个(如果不是数千个)后台线程。这些服务器是复杂的野兽,而这些线程只是完成其工作的后台管道 “多路复用器”是一种多路复用器,它是一种将多个数据流组合到单个通道上的机制。Weblogic将使用这些来与自身或集群中的其他节点交换数据。在任何给定的时间,其中一些将被“阻止”,因为它们没有任何事情可做 几乎可以肯定,这不值得担心。如果你看岩石下面,你肯定会发现下面有一些丑陋的东西在阳光下向你眨眼。我发现这可以很好地解释这种情况: 套接字Muxer管理服务器的 现有的套接字连接。首先 确定哪些套接字具有传入端口 等待处理的请求。信息技术 然后读取足够的数据以确定 协议,并分派套接字 到适当的运行时层 关于协议。在运行时层, 套接字muxer线程决定 要使用哪个执行线程队列 并相应地委派请求 从文档()中: WebLogic服务器使用软件模块 调用muxer读取传入的 服务器上的请求和传入的 客户机上的响应。这些传声器 有两种主要类型:Java muxer或本地muxer Java muxer具有以下功能 特点:
- 使用纯Java从套接字读取数据
- 它也是唯一可用于RMI客户端的muxer
- 阻止读取,直到有数据要从套接字读取。当存在大量套接字和/或数据不经常到达时,此行为无法很好地扩展 在插座上。这对于客户端来说通常不是问题,但它会为服务器造成巨大的瓶颈
启用本机IO
参数
允许服务器自动运行
选择适当的多路复用器用于
要使用的服务器
如果启用本机IO
参数为
未选中,服务器实例将被删除
专门使用Java muxer。这
如果有一个小的
客户数量和当前的费率
到达服务器的请求是
相当高。在这种情况下,,
Java muxer的性能与
本机muxer和消除Java本机
接口(JNI)开销。不像
本机muxer,线程数
用于读取的请求不是固定的,并且
可通过
配置百分比套接字读取器
中的参数设置
管理控制台。看见理想情况下,您应该配置
此参数使
线程数大致等于
远程并发连接客户端
高达总线程池的50%
尺寸。每个线程都等待一个固定的
数据转换的时间量
可在插座上使用。如果没有数据
到达时,线程移动到下一个线程
插座
那么,出于这些原因,使用本地多路复用器显然更好
这里,看起来您使用的是默认的本机muxer(
weblogic.socket.EPollSocketMuxer
),而不是Java muxer(weblogic.socket.SocketMuxer)
单词“muxer”是单词“multiplexer”的缩写。您看到的是一个内部Weblogic类。抱歉,我不知道为什么会出现这些错误。这不是错误,只是从线程转储中剪切的堆栈跟踪。