线程在选择频道时挂起

Threads hang on selecting a channel

我正在对 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 没有足够的通道来发回响应,但我不确定与此相关的设置。我检查了 OS 上的文件限制,它设置为无限制。我不确定我还需要检查什么。有任何想法吗?代码是 运行 在 Solaris box 运行 SunOS.

编辑:线程池已配置为使用最少 250 个线程进行初始化,并且可以增长到 400 个线程。在问题点,我们有 250 个线程,其中只有 60 个正在处理请求。

Threads hang on selecting a channel

没有

I believe the above means WebLogic does not have enough channel to send the responses back

没有

一个线程阻塞选择网络事件,这意味着没有传入数据,套接字发送缓冲区中没有 space,等等,具体取决于选择的事件。

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

你对此无能为力。