Ι这真的是我应用程序中的一个阻塞问题吗?
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:92)在线程分析器中显示阻塞,它真的是我应该担心的阻塞线程吗?
ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" daemon prio=3 tid=0x0000000101f38000 nid=0x38 waiting for monitor entry [0xfffffffe40dff000]
java.lang.Thread.State: BLOCKED (on object monitor) at
weblogic.socket.DevPollSocketMuxer.processSockets(DevPollSocketMuxer.java:92) -
waiting to lock <0xfffffffe70ec4898> (a java.lang.String) 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)编辑:
我得到了一个link的解释答案(上面说这不是问题),但是我不确定阻塞线程的作用是什么?为什么要这样设计呢?因此,将问题的标题更改如下
旧标题- weblogic.socket.DevPollSocketMuxer.processSockets在线程分析器中显示阻塞,它真的是我应该担心的阻塞线程吗?
新标题-Why阻塞weblogic.socket.Muxer线程可以接受吗?它的作用是什么?
发布于 2013-12-12 06:11:38
观察多路复用器线程被阻塞不是问题,这是正常行为。你不应该担心这个。
多路复用器线程争用轮询锁来轮询文件描述符,因此大量线程不会增加任何好处。一个多路复用器线程通常在轮询函数中,而其他线程可用于处理请求。轮询线程在线程转储中可见。
以下是关于这一点的更多细节:
可以看到,ExecuteThread:'5‘和'4’都属于weblogic.socket.Muxer队列,ExecuteThread:'5‘持有java/lang/
@0x17674d0c8上的锁,而ExecuteThread:'4’阻塞相同的锁。持有锁的多路复用器线程正在进行本机轮询,而其他多路复用器线程则被阻塞,因为在一组fds上只能有一个线程进行轮询。
其他资源:
多路复用器线程调整:
即使线程在您的线程转储中仍然处于阻塞状态,您也不必为此担心,您始终需要检查是否为您的WLS实例分配了适当数量的线程-基于每个WLS实例的可用核心数。参见Weblogic Tuning - Tuning Muxers。
https://stackoverflow.com/questions/20424680
复制相似问题