假设Tomcat支持最多5个线程,并且5个线程正在进行中(假设这些请求将花费很多时间)。现在,请求中的1个创建了另外2个执行某项操作的线程,
服务器在任何给定时间将接受和处理的最大连接数。达到此数目后,服务器将接受但不处理另一个连接。在处理的连接数降至maxConnections以下之前,该附加连接将被阻止,此时服务器将再次开始接受和处理新的连接。请注意,一旦达到限制,操作系统仍然可以基于acceptCount设置接受连接。默认值因连接器类型而异。对于BIO,除非使用执行程序,否则默认值为maxThreads的值,在这种情况下,默认值为执行程序的maxThreads的值。对于NIO,默认值为10000。对于APR / native,默认值为8192。
线程限制是为Tomcat用于分配给传入请求的内部池配置的最大数量。这不是对JVM使用的线程数的硬限制。
如果您的请求new Thread()
在其工作过程中创建了更多线程(调用),则这些线程不是来自缓冲池,而是从操作系统中请求的。
但是最好的方法可能是使用单独的专用线程池。您始终可以配置自己的线程池,并让您的请求从该池中获取线程。这样一来,您就不会使系统运行在线程不足的情况下(如果无法控制并且线程开始挂起,您可能会冒险创建新线程),并且不会降低Tomcat的服务请求能力(如果您使用的是Tomcat的池)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句