【问题标题】:Tomcat: how to limit number of threads (not requests) in the entire application?Tomcat:如何限制整个应用程序中的线程数(不是请求数)?
【发布时间】:2020-03-03 07:41:58
【问题描述】:

据此link

server.tomcat.max-threads - 服务器中工作线程的最大数量 在最高负荷下。换句话说,最大同时数 可以处理的请求。

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

【问题讨论】:

  • 您将通过了解您正在运行的应用程序类型及其负载配置文件来做到这一点

标签: java tomcat


【解决方案1】:

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

改为使用线程数具有固定上限的线程池。

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


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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 2016-02-21
    • 1970-01-01
    • 2013-05-30
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多