线程在选择通道时挂起



我正在WebLogic中测试一个应用程序的性能,在某个时候性能开始下降,我看到所有提供http请求的线程都被困在这个代码中

          sun.nio.ch.DevPollArrayWrapper.poll0(Native Method)
          sun.nio.ch.DevPollArrayWrapper.poll(DevPollArrayWrapper.java:223)
          sun.nio.ch.DevPollSelectorImpl.doSelect(DevPollSelectorImpl.java:84)
          sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
          sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
              weblogic.socket.NIOSocketMuxer$NIOOutputStream.writeInternal(NIOSocketMuxer.java:1090)
              weblogic.socket.NIOSocketMuxer$NIOOutputStream.write(NIOSocketMuxer.java:983)
          weblogic.socket.JSSEFilterImpl.writeToNetwork(JSSEFilterImpl.java:773)
          weblogic.socket.JSSEFilterImpl.wrapAndWrite(JSSEFilterImpl.java:734)

我认为以上情况意味着WebLogic没有足够的通道来发送回复,但我不确定与此相关的设置是什么。我已经检查了操作系统上的文件限制,它被设置为无限制。我不确定我还需要检查什么。有什么想法吗?该代码运行在运行SunOS的Solaris机箱上。

EDIT:线程池已配置为至少使用250个线程进行初始化,并且可以增长到400个线程。在问题的关键点上,我们有250个线程,其中只有60个线程在提供请求。

线程在选择通道时挂起

没有。

我认为上述情况意味着WebLogic没有足够的通道将响应发送回

没有。

这是一个线程阻塞,而在网络事件上进行选择,这意味着没有传入数据,套接字发送缓冲区中没有空间,等等,这取决于选择的事件。

在这种情况下,它是由堆栈下游的写操作调用的,这表明套接字发送缓冲区中缺少空间,这表明对等方读取速度较慢。

你对此无能为力。

最新更新