繁体   English   中英

Tomcat:如何限制整个应用程序中的线程数(不是请求)?

[英]Tomcat: how to limit number of threads (not requests) in the entire application?

根据此链接

server.tomcat.max-threads – 最高负载下服务器中的最大工作线程数。 换句话说,可以处理的最大并发请求数。

假设 tomcat 服务器收到的每个请求都会产生 3 个工作线程以从数据库读取。 这意味着对于 5 个请求,我们有 20 个线程(每个请求有 1 个线程和额外的 3 个工作线程)。 在这种情况下,我们是否将线程数视为 20 或 5 来处理属性 server.tomcat.max-threads?

限制线程数量的方法是不直接生成它们。

而是使用具有固定线程数上限的线程池。

执行此操作的现代方法是使用ExecutorService API ( javadoc ) 并使用Executors.newFixedThreadPool(...) ( javadoc ) 或直接使用许多ThreadPoolExecutor ( javadoc ) 构造函数重载之一来实例化服务。


在这种情况下,我们是否将线程数视为 20 或 5 来处理属性 server.tomcat.max-threads?

就该 Tomcat 配置属性而言,在处理请求时由应用程序或应用程序线程池创建的线程不计为“工作线程”。

由应用程序或其线程池来管理它创建的任何线程并确保:

  • 这些线程的数量不会太大,
  • 它们不会消耗太多资源(CPU、内存等),并且
  • 他们不会变得“孤立”并最终在不再需要的任务上浪费资源; 例如,因为原始客户端请求超时。

请注意,这种事情很容易变成“拒绝服务”问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM