当前位置: 首页 > 知识库问答 >
问题:

Tomcat应用程序中的其他线程池

孟俊晖
2023-03-14

我的工作与Javawebapp与Apache Tomcat一起运行。Tomcat线程池的最大线程数为800,minSpareThread为25。当它运行时,它通常在给定时间运行大约400个线程。

比方说,我有一个计算成本很高的非阻塞任务,我必须在我的Tomcat应用程序中完成,在这个应用程序中,ForkJoinPool。commonPool用于更有效地解决任务。

因为我的ApacheTomcat应用程序中已经有一个很大的线程池,Tomcat线程池是否会降低我在Tomcat应用程序中使用ForkJoinPool(或者任何线程池)所获得的性能增益?在ForkJoinPool旁边运行Tomcat线程池的性能成本会抵消使用ForkJoinPool的性能收益吗?因为现在,线程将比CPU多得多?

向Apache Tomcat应用程序添加任何类型的额外线程池对整个应用程序的性能有害吗?

共有1个答案

薄兴昌
2023-03-14

很难对这个问题给出一个笼统的答案,因为它在很大程度上取决于具体的工作量。测试和分析您自己的应用程序是无可替代的。然而,这里有一些事情需要考虑。

在单独的线程池中运行CPU限制的任务并不能保证给您带来任何性能上的好处。这可能有两个主要原因:

  1. 当一个线程将任务提交给一个执行者在一个单独的线程上运行时,它可以继续并发地执行其他工作

拥有更多线程的成本是:

  1. 分配给每个线程的内存
  2. 操作系统将CPU时间从一个线程重新分配到另一个线程时,上下文切换导致的延迟

Tomcat请求线程池大小的默认值基于线程花费大量时间阻塞I/O的常见情况:通过网络读取请求,进行数据库查询和更新,并将响应写回客户端。这意味着这些线程不能利用所有可用的CPU时间,拥有比CPU内核多得多的线程是有益的,这样阻塞的线程就可以被需要CPU时间的线程抢占。

所以,一个大问题是调用这些任务的是什么:它是一个请求线程吗?如果是这样,在任务进行过程中,该请求线程做什么?它正在进行阻塞I/O调用吗?是否只是等待任务完成?

如果您的大多数请求都在调用这些CPU密集型任务之一,然后被阻止等待它完成,并且如果这些任务没有被分割成在多个内核上并行运行,那么您可能不会从单独运行任务中获得任何好处线程池。最好避免上下文切换的开销,并在请求线程上运行这些任务。如果您的服务处理的大多数请求都运行这种类型的任务,那么您可能需要减少Tomcat线程池中的请求线程数量,因为您的实际并发将受到可用CPU时间的限制。最终可能会有大量等待线程和高响应延迟。这些请求可能会在客户端超时,在最终失败的请求上浪费大量服务器资源。

 类似资料:
  • 还有,我应该什么时候关闭executor服务? 我是新的纺纱线程这种方式,有人能帮助我了解它是如何工作的吗?

  • 问题内容: 我对Tomcat不太熟悉,在我看来,它基本上是抽象为cgi服务器,可以在两次调用之间保存JVM -尽管我知道它可以做得多。 我正在寻找一种在Tomcat服务器启动时启动 后台 线程的方法,该方法会定期更新服务器上下文(在我的特殊情况下,这是一个侦听其他服务的心跳并更新可用性信息的线程,但是可以想象得到有多种用途)。 有标准的方法吗?上下文的启动和更新/查询? 指向相关文档和/或代码示例

  • 在Spring Boot应用程序中或一般情况下,tomcat是否配置了默认线程池? 如果配置了线程池,当容器从池中挑选线程时,特定的线程将服务于许多请求?

  • 你好,我是多线程编程的新手。我正在尝试创建一个代码来创建一个线程THREAD1,在它完成某些事情后,它会触发另外两个线程,例如THREAD2和THREAD3,然后退出。 我写了两个可能的解决方案。 1) 使用条件变量(不起作用:在某些情况下会出现死锁): 2) THREAD1直接创建另外两个线程。 我想知道你的意见。非常感谢你

  • 以下是包含在Apache中的没有专门手册页的简单支持程序,这些程序不是自动安装的,而是在配置过程以后,装在"support"目录下的。 log_server_status 此perl脚本可以由频繁使用的诸如cron的工具所调用。它连接到服务器并下载状态信息,并格式化此信息为一行,并记录在一个文件中。要指定结果的输出文件的位置,可以调整该脚本首行中的变量。 split-logfile 此perl脚本

  • 问题内容: 我希望能够启动活动或服务并尽快获取该进程的PID,这将是最好的情况。除了浏览/ proc目录外,我是否还有其他选择,否则会导致活动/服务启动到我在proc中找到所需时间之间的时间量竞争状态发生变化目录并开始观察? 问题答案: 我认为您需要使用ActivityManager:有关过程信息,请参见http://developer.android.com/reference/android/