我有一个运行应用程序的wildfly服务器(版本10.0.0)。我还有一个python库,使用grequest对此应用程序进行负载测试。当我运行测试时,我可以看到数以千计的I / O调度程序线程正在创建,并且正在打开数十万个文件句柄。即使在脚本关闭后,这些线程也会挂起。最终我开始看到创建更多套接字连接或打开文件的问题,并且该过程也耗尽了内存。
虽然可能在python脚本端没有完成某些事情(可能有读取响应或关闭连接)但我的问题是为什么在第一个创建了如此多的I / O调度程序线程地点。默认没有限制吗?有没有办法在线程池上配置限制?
以下是I / O调度程序线程堆栈的示例
I/O dispatcher 14981" #1545291 prio=5 os_prio=0 tid=0x00007fdb7c039000 nid=0x5475 runnable [0x00007fdadaaab000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000001c1001860> (a sun.nio.ch.Util$3)
- locked <0x00000001c1001850> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000001c1001808> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:255)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
at java.lang.Thread.run(Thread.java:748)