且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Weblogic使用NIO模型

更新时间:2022-09-16 23:23:22

Weblogic的线程数一直比较少,我一直认为他是采用的NIO模型,今天突然发现他的accept线程栈是采用的BIO,DynamicListenThread线程栈:

java.net.PlainSocketImpl.socketAccept(Native Method)
java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
   - 已锁定 java.net.SocksSocketImpl@1b77816
java.net.ServerSocket.implAccept(ServerSocket.java:453)
java.net.ServerSocket.accept(ServerSocket.java:421)
weblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java:38)
weblogic.server.channels.DynamicListenThread$SocketAccepter.accept(DynamicListenThread.java:535)
weblogic.server.channels.DynamicListenThread$SocketAccepter.access$200(DynamicListenThread.java:417)
weblogic.server.channels.DynamicListenThread.run(DynamicListenThread.java:173)
java.lang.Thread.run(Thread.java:619)

这让我突然陷入了恐慌。资料显示在添加

-Dweblogic.MuxerClass=weblogic.socket.NIOSocketMuxer之后,wls才会采用NIO.  DynamicListenThread线程栈:

sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:145)
   - 已锁定 java.lang.Object@1dc22ad
weblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java:30)
weblogic.server.channels.DynamicListenThread$SocketAccepter.accept(DynamicListenThread.java:535)
weblogic.server.channels.DynamicListenThread$SocketAccepter.access$200(DynamicListenThread.java:417)
weblogic.server.channels.DynamicListenThread.run(DynamicListenThread.java:173)
java.lang.Thread.run(Thread.java:619

对这位前辈了解真得太少了。

weblogic共有三个Muxer(我也不知道该怎么译):

如果-Dweblogic.MuxerClass=weblogic.socket.NIOSocketMuxer被设置刚采用NIOSocketMuxer,否则如果NativeIOEnabled是true, 则采用native muxer. 如果前两个条件都不满足,则会采用纯java的Java Muxer

虽然accept线程采用的是BIO,但weblogic实现了一套 native muxer,来处理请求读写。而这一套native muxer在unix平台用得是多路复用(类似Java nio模型),在window平台用的是完成端口(jdk7才有)。

 

本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/941697