你们中有人了解 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)它会影响任何性能吗?
从文档(http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246 http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246):
WebLogic Server 使用软件模块
调用复用器来读取传入的
服务器上的请求和传入的
客户端上的响应。这些复用器
有两种主要类型:Java
复用器或本机复用器。
Java 复用器具有以下功能
特征:
- 使用纯Java从套接字读取数据。
- 它也是唯一可用于 RMI 客户端的复用器。
- 阻塞读取,直到有数据要从套接字读取。当存在大量套接字和/或数据不频繁到达时,此行为无法很好地扩展
在插座上。对于客户端来说,这通常不是问题,但它可能会给服务器造成巨大的瓶颈。
本机复用器使用特定于平台的
用于读取数据的本机二进制文件
插座。所有平台中的大多数
提供一些机制来轮询
用于数据的套接字。例如,Unix
系统使用轮询系统和
Windows 架构使用补全
端口。原生提供优越
可扩展性,因为它们实现了
非阻塞线程模型。当一个
使用本机复用器,服务器
创建固定数量的线程
专门用于读取传入的
要求。 BEA 建议使用
所选的默认设置Enable Native IO
参数哪个
允许服务器自动
选择合适的复用器
要使用的服务器。
If the Enable Native IO
参数是
未选择,服务器实例
专门使用 Java muxer。这
如果有小的可能可以接受
客户数量和费率
到达服务器的请求是
相当高。在这些条件下,
Java 复用器的性能与
本机复用器并消除 Java Native
接口 (JNI) 开销。不像
本机复用器,线程数
用于读取请求不固定并且
Java 复用器可通过以下方式进行调整
配置Percent Socket Readers
中的参数设置
管理控制台。看改变
可用插座数量
读者 http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152595。理想情况下,您应该配置
这个参数所以数量
线程数大致等于
远程并发连接的客户端
最多占总线程池的 50%
尺寸。每个线程等待一个固定的时间
数据变为的时间量
可在插座上使用。如果没有数据
到达,线程移动到下一个
插座。
那么,出于这些原因,使用本机复用器显然更好。
在这里,看起来您正在使用默认的本机复用器(weblogic.socket.EPollSocketMuxer
),而不是 Java 复用器(weblogic.socket.SocketMuxer)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)