And*_*ich 12 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
Run Code Online (Sandbox Code Playgroud)
这不是我有任何问题,它只是有趣的理解:
1)它在做什么?
2)它会影响任何表现吗?
从文档(http://download.oracle.com/docs/cd/E13222_01/wls/docs100/perform/WLSTuning.html#wp1152246):
WebLogic Server使用称为多路复用器的软件模块来读取服务器上的传入请求和客户端上的传入响应.这些复用器有两种主要类型:Java复用器或本机复用器.
Java muxer具有以下特征:
- 使用纯Java从套接字读取数据.
- 它也是RMI客户端唯一可用的复用器.
- 阻塞读取,直到有数据要从套接字读取.当存在大量套接字和/或数据很少在套接字到达时,此行为无法很好地扩展.这通常不是客户端的问题,但它可能会给服务器带来巨大的瓶颈.
本机复用器使用特定于平台的本机二进制文件从套接字读取数据.大多数平台都提供了一些机制来轮询套接字以获取数据.例如,Unix系统使用轮询系统,Windows体系结构使用完成端口.Native提供了卓越的可伸缩性,因为它们实现了非阻塞线程模型.使用本机多路复用器时,服务器会创建专用于读取传入请求的固定数量的线程.BEA建议使用参数的默认设置选项,该设置
Enable Native IO允许服务器自动为服务器选择适当的复用器.如果
Enable Native IO未选择该参数,则服务器实例将专门使用Java多路复用器.如果存在少量客户端并且请求到达服务器的速率相当高,则这可能是可接受的.在这些条件下,Java muxer的性能与本机muxer一样,并消除了Java Native Interface(JNI)开销.与本机复用程序不同,用于读取请求的线程数不固定,并且可通过Percent Socket Readers在管理控制台中配置参数设置来调整Java复用程序.请参阅更改可用套接字读取器的数量.理想情况下,您应该配置此参数,以便线程数大致等于远程并发连接的客户端数量,最多为总线程池大小的50%.每个线程等待一段固定的时间,以使数据在套接字上可用.如果没有数据到达,则线程移动到下一个套接字.
然后,由于这些原因,使用本机复用器显然更好.
在这里,看起来您使用的是默认的本机muxer(weblogic.socket.EPollSocketMuxer),而不是Java muxer(weblogic.socket.SocketMuxer).
对于任何给定的应用程序服务器,线程转储将为您显示数百个(即使不是数千个)后台线程。这些服务器是复杂的野兽,这些线程只是完成任务的后台管道。
“复用器”是多路复用器,它是一种将多个数据流组合到单个通道上的机制。Weblogic将使用它们与自身或集群中的其他节点交换数据。在任何给定时间,其中许多都将被“阻止”,因为它们无关紧要。
几乎没有理由担心。如果您在岩石下面看,您一定会发现下面的一些丑陋事物在阳光下闪烁。
| 归档时间: |
|
| 查看次数: |
35886 次 |
| 最近记录: |