我正在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没有足够的通道将响应发送回
没有。
这是一个线程阻塞,而在网络事件上进行选择,这意味着没有传入数据,套接字发送缓冲区中没有空间,等等,这取决于选择的事件。
在这种情况下,它是由堆栈下游的写操作调用的,这表明套接字发送缓冲区中缺少空间,这表明对等方读取速度较慢。
你对此无能为力。