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

弹性Beanstalk上的Tomcat——Tomcat线程中的多线程

田俊爽
2023-03-14

我正在Elastic BeanstekWorker层上的Tomcat 8上运行Spring MVC应用程序。对于那些不熟悉Elastic Beanstek的人,每当发生SQS事件时,Amazon都会自动向我的WorkerSpring MVC应用程序执行POST请求。我的应用程序然后处理请求并返回200(除非明显出错)。

我想在处理单个POST请求时使用并发。例如,假设我需要执行10种不同的昂贵计算。我希望使用ExecutorService让10个线程同时执行这项工作,而不是串行执行。

  • 这是坏习惯吗?如果没有,以这种方式启动新线程是否存在性能危险
  • 线程的分配实际上是如何工作的(例如,它们是从Tomcat的线程池还是其他什么地方偷来的)
  • 是否应该有一个可供所有Tomcat线程访问的共享线程池?如果是,它应该有多大
  • 将工作分解成更多的SQS事件,并将子任务本质上分配给Tomcat线程,而不是在单个Tomcat线程中完成,这样做更好吗

共有1个答案

黄淇
2023-03-14

这确实是多个问题,但根本是在使用Tomcat实现的队列工作器中使用ExecutorService是否有意义。

这是坏习惯吗?如果没有,以这种方式启动新线程是否存在性能危险?

这很好,但您需要确保将Tomcat配置为正确关闭executor服务。

线程的分配实际上是如何工作的(例如,它们是从Tomcat的线程池还是其他什么地方偷来的)?

ExecutorService将创建自己的线程池。Tomcat线程不能用于您自己的目的。拥有这个独立的游泳池没有什么错。

是否应该有一个可供所有Tomcat线程访问的共享线程池?如果是,它应该有多大?

在所有Tomcat线程中共享一个池是有意义的。大小最好由您的特定用例决定,但ExecutorService为您提供了许多选项来创建高效的池。

将工作分解成更多的SQS事件,并将子任务本质上分配给Tomcat线程,而不是在单个Tomcat线程中完成,这样做更好吗?

这确实是一个重要的问题。如果你有不相关的独立任务,把它们分解成独立的SQS消息可能是有意义的。但是,如果您有单独的任务,这些任务实际上是更大任务的一部分,可以简单地并行执行,将其作为单个SQS消息保留,但使用ExecutorService通过并行处理部分来提高性能可能是最好的。

 类似资料:
  • 好奇地发现我的应用程序部署在tomcat上可以满足的并发请求的最大数量。 我知道: 在tomcat配置中,有一些参数可以帮助我,比如: > MaxConnections——服务器在任何给定时间接受和处理的最大连接数。当达到这个数字时,服务器将接受但不处理另一个连接。 我想知道的是: > 以上参数是否足以知道我的应用程序可以处理的最大“并发”请求数? 假设最大连接数为200,那么这意味着如果有200

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

  • 问题内容: 你好,我们已经在java 1.6,tomcat 6,oracle 11g上迁移了Java Web应用程序,但是现在一段时间站点关闭后我们遇到了问题:我们正在使Java堆内存不足错误并且许多线程处于等待状态。tomcat被绞死,我们的网站被压倒 信息:为地址为空且端口为80的连接器创建的最大线程数(200),2013年2月21日,这里是线程日志: 日志 结束 请指导。 谢谢阿鲁 问题答案

  • 我的Spring Boot应用程序在本地安装的Tomcat服务器上运行良好。但是当我将相同的WAR部署到弹性豆茎并单击给定的URL时,我得到的只是404。在我的Spring Boot应用程序中没有指定的路由在这里工作。可能的原因是什么? server.port=5000

  • 我在log4j v1中面临内存泄漏的问题。如何解决这个内存泄漏问题。此方法是定期检查log4j.properties文件在我的类中的更新。 PropertyConfigutaror.ConfigureandWatch(time_ms); 但是在关机期间,tomcat内存泄漏问题就来了。日志如下: 提前致谢

  • 我的工作与Javawebapp与Apache Tomcat一起运行。Tomcat线程池的最大线程数为800,minSpareThread为25。当它运行时,它通常在给定时间运行大约400个线程。 比方说,我有一个计算成本很高的非阻塞任务,我必须在我的Tomcat应用程序中完成,在这个应用程序中,ForkJoinPool。commonPool用于更有效地解决任务。 因为我的ApacheTomcat应