Weblogic使用NIO模型

科技小能手發表於2017-11-15

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


相關文章