- 浏览: 24510 次
- 性别:
- 来自: 大连
-
文章分类
最新评论
原文:http://jojovedder.blogspot.com/2009/05/weblogic-socket-muxers-are-not-stuck.html
What are these weblogic.socket.Muxer threads seen in thread dumps ?
Note: for a basic primer on taking thread dumps and analyzing them, see this earlier article
Socket Reader Threads accept the incoming request from the Listen Thread Queue and put it on the Execute Thread Queue.
In WL 8.1, there are 3 socket reader threads by default.
In WL 9 and 10, WebLogic allocates 33% of server threads to act as socket readers by default. This need not be changed usually.
One socket reader thread is usually in the poll function, while the others are available to process requests.
The polling thread is highlighted in the thread dump below.
"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x016b2148 nid=0x42 waiting for monitor entry [5997f000..5997fc28]
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
- waiting to lock <0x94846b40> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x00683c28 nid=0x41 waiting for monitor entry [59a7f000..59a7fc28]
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
- waiting to lock <0x94846b40> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x0079e5b0 nid=0x40 runnable [59b7f000..59b7fc28]
at weblogic.socket.PosixSocketMuxer.poll(Native Method)
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:100)
- locked <0x94846b40> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
In an earlier support case on Stuck Threads, we asked BEA:
Should we worry about the Weblogic.socket.Muxer threads which always show 2 threads waiting for lock and 3rd thread locking the same object?
The Muxer TD is attached. This shows same behaviour on all our Weblogic servers.
Full thread dump Java HotSpot(TM) Server VM (1.4.2_05-b04 mixed mode):
"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x0151
c588 nid=0x1b4 waiting for monitor entry [ad57f000..ad57fc28]
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
- waiting to lock <0xd9331760> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x0161
d608 nid=0x1b3 runnable [ad67f000..ad67fc28]
at weblogic.socket.PosixSocketMuxer.poll(Native Method)
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:100)
- locked <0xd9331760> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0x01bb
6730 nid=0x1b2 waiting for monitor entry [ad77f000..ad77fc28]
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
- waiting to lock <0xd9331760> (a java.lang.String)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
The reply from BEA Support was that the above pattern of weblogic.socket.Muxer threads are not a cause of stuck threads.
As the image shows, when you analyze thread dumps using Samurai, the muxer threads are shown as being Stuck since they're all locked on the same object. This is probably treated as a deadlock condition.
"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'"
- waiting to lock <0xd9b61098> (a java.lang.String)
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'"
- waiting to lock <0xd9b61098> (a java.lang.String)
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'"
- locked <0xd9b61098> (a java.lang.String)
But you will see the same in any Thread dump even on a development instance with no requests.
The locks mentioned do show up as red in Samurai - but they aren't deadlocks just regular locks.
A thread gains an exclusive lock on an object to perform some action, then frees it allowing the next thread to gain access.
Additionally, if you look at the thread dumps over time, you'll see that these specific locks are not always present - they are moving between the threads which is indicative of their transitory nature.
I want to know more details on Muxers
The socket Muxer manages the server’s existing socket connections.
It first determines which sockets have incoming requests waiting to be processed. It then reads enough data to determine the protocol and dispatches the socket to an appropriate runtime layer based on the protocol.
In the runtime layer, the socket muxer threads determine which execute thread queue to be used and delegates the request accordingly.
From the documentation on http://edocs.bea.com/wls/docs100/perform/WLSTuning.html#wp1152246 ,
Weblogic has two versions of the socket muxer, one is the Java version and the other uses a native library which makes better use of operating system calls. The Enable Native IO checkbox on the server’s configuration settings tells the server which version to use. This is ON by default for most platforms.
Native muxers provide superior scalability because they implement a non-blocking thread model. When a native muxer is used, the server creates a fixed number of threads dedicated to reading incoming requests. Oracle recommends using the default setting of true for the Enable Native IO parameter which allows the server to automatically select the appropriate muxer to use.
You must ensure that to use Native I/O, the native library must be present in the server’s shared library path . This is set up with the default scripts.
When the server does not find the native library, it throws an error
java.lang.UnsatisfiedLinkError: no muxer in java.library.path
and then loads the Java version of the muxer.
Confirm the LD library path is okay and pointing to the Solaris LD path. Check the startup log when starting a managed server. What is the value of java.library.path?
This is where the JVM actually get's the library from.
http://m-button.blogspot.com/2008/08/how-does-weblogic-handle-socket-muxers.html has a good example of how to identify Native vs Java muxer in a thread dump.
The Thread Dump I’ve used in my examples above uses the Native muxer (weblogic.socket.PosixSocketMuxer) on Solaris.
Solaris has another Native muxer called the weblogic.socket.DevPollSocketMuxer
An example TD using this muxer is shown below.
"ExecuteThread: '4' for queue: 'weblogic.socket.Muxer'" waiting for lock java.lang.String@4edf4f BLOCKED
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:95)
weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
"ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" RUNNABLE native
weblogic.socket.DevPollSocketMuxer.doPoll(Native Method)
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:96)
weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" waiting for lock java.lang.String@4edf4f BLOCKED
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:95)
weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" waiting for lock java.lang.String@4edf4f BLOCKED
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:95)
weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" waiting for lock java.lang.String@4edf4f BLOCKED
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:95)
weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
To change the number of Muxers from the default, follow the instructions given at http://e-docs.bea.com/wls/docs92/ConsoleHelp/taskhelp/tuning/TuningSocketReaders.html
See http://jojovedder.blogspot.com/2009/07/more-on-weblogic-muxers.htmlfor an update on Muxers
Additionally on Oracle JRockit JVMs - there are some information in the thread dumps which point out the same problem in a different manner.
After the normal stack dumps, BEA JRockit performs a deadlock detection. This is done by finding "lock chains" in the Java application. If a lock chain is found to be circular, the application is considered caught in a deadlock.
A detailed explanation of the 3 types of lock chains in JRockit is given here
What is relevant for us is the example of Muxers which are shown as:
Blocked lock chains
===================
Chain 2:
"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" id=129 idx=0x218 tid=4079 waiting for java/lang/String@0x37804000 held by:
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" id=127 idx=0x210 tid=4077 in chain 1
Open lock chains
================
Chain 1:
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" id=128 idx=0x214 tid=4078 waiting for java/lang/String@0x37804000 held by:
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" id=127 idx=0x210 tid=4077 (active)
As per the explanation, the Open lock chain depicts Thread 1 waiting for Thread 0. This is not a deadlock, only a straight dependency.
Since Thread 0 is already part of the Open lock chain, the fact that Thread 2 is also waiting on the same Thread 0 is treated as a "Blocked lock chain".
In this case this is not a problem.
发表评论
-
Weblogic Muxer Thread
2015-07-09 16:15 10991 Weblogic Muxer Sock ... -
How to find Oracle WebLogic Server Version ?
2015-01-12 00:40 541Use one of the following metho ... -
Causes and First Aid of JVM Crash Issues?
2011-12-18 23:09 961Java Virtual Machine is a Na ... -
利用 Java dump 进行 JVM 故障诊断
2011-12-18 22:22 0引言对于大型 java 应用程序来说,再精细的测试都难以堵住所 ... -
weblogic v10.3配置nodemanager的"BAD_CERTIFICATE alert"的错误
2011-12-05 00:21 4131在使用weblogic 10.3自带的demo identit ... -
关于nohup
2011-11-18 13:54 991nohup 是一个Unix/Linux命令,表示no hang ... -
在Linux平台安装Oracle比较常见的问题
2011-11-06 21:42 18751. 不能启动安装界面 运行runInstaller提示信息 ...
相关推荐
自用CVE-2018-3191 weblogic反序列化exp。
《Ant与WebLogic集成:ant-weblogic-1.6.jar.zip深度解析》 在软件开发领域,Apache Ant和Oracle WebLogic Server是两个重要的组件。Ant是一个基于Java的构建工具,而WebLogic则是一款广泛使用的Java EE应用服务器...
【K8 weblogic-CVE-2018-2628-getshell工具】是一款针对Oracle WebLogic服务器的渗透测试工具,主要用于检测和利用CVE-2018-2628安全漏洞获取服务器的shell控制权。这个工具集成了漏洞的详细利用过程,包括图片教程...
《Weblogic-CVE-2019-2725补丁升级方法详解》 WebLogic Server是一款由甲骨文公司开发的企业级应用服务器,它为构建、部署和管理企业级Java应用程序提供了全面的平台。然而,随着技术的发展,安全漏洞的出现是不可...
【K8 weblogic-CVE-2018-2628-getshell】是一个针对Oracle WebLogic Server的渗透测试工具,主要用于检验系统是否存在CVE-2018-2628漏洞并利用该漏洞获取shell权限。这个工具的使用应该严格限制在合法的安全测试环境...
《Ant与WebLogic集成:深度解析ant-weblogic-1.6.2.jar.zip》 在IT行业中,构建和部署Java应用程序是一项重要的任务,而Apache Ant和Oracle WebLogic Server是两个在此过程中发挥关键作用的工具。Ant是一个基于Java...
weblogic-CVE-2023-21839-JNDIExploit-1.4-SNAPSHOT.jar
《Ant与WebLogic集成:深度解析ant-weblogic-1.6.4.jar.zip》 在IT行业中,构建和部署应用程序是开发流程中的重要环节。Apache Ant作为一款强大的Java项目自动化构建工具,因其灵活性和可扩展性深受开发者喜爱。而...
仅供测试使用,后果自行负责。
quartz-weblogic-1.8.6.jar
《Ant与WebLogic集成:详解ant-weblogic-1.6.5.jar.zip》 在Java开发领域,Ant和WebLogic是两个重要的工具。Ant是一种基于Java的构建工具,用于自动化软件项目的构建、编译、测试和部署过程。而WebLogic则是Oracle...
maven-weblogic-plugin-1.0.0.jar
"Weblogic-OPatch-13.9.4.2.5"很可能是指WebLogic Server的特定版本13.9.4.2.5所对应的OPatch更新。 OPatch全称为Oracle Patching Utility,它简化了Oracle产品的修补过程,包括WebLogic Server。OPatch通过自动化...
weblogic-server-ee-datasheet.pdf
WebLogic Server是一款由Oracle公司开发的企业级应用服务器,它提供了用于构建、部署和管理企业级应用程序的全面平台。在WebLogic Server中集成Jolt是为了实现与Tuxedo系统的互操作性。Tuxedo是一款高性能、分布式...
漫谈WebLogic-CVE-2020-25511
《Ant与WebLogic集成:ant-weblogic-1.6.3.jar深度解析》 在Java开发领域,构建工具Ant和应用服务器WebLogic是两个至关重要的组件。Ant是一种基于XML的构建工具,它允许开发者通过编写XML配置文件来自动化构建过程...
标签:ant-weblogic-1.7.0.jar,ant,weblogic,1.7.0,jar包下载,依赖包