我在嵌入式tomcat中运行Spring应用程序。大约有50个并发HTTP会话,每个会话都由5-7并发运行异步后端调用(@异步)提供服务。Tomcat或Spring没有特定的线程配置。
我发现长时间运行的线程(不管是Tomcat还是异步调用)严重降低了其他线程的性能。例如,如果我使用CR生成报告,这需要20-40秒,那么大多数异步线程看起来都瘫痪了。
如何优化代码和配置以解决性能问题?
发布于 2022-05-20 20:56:17
根据您的描述,您的配置可能会出现几个瓶颈。但其中之一可能是系统中可用的线程数。从这里你能做的最好的事情就是分析你的应用程序,检查哪些线程是可用的,它们是如何使用的,它们在哪里被阻塞。
此外,假设线程数是问题所在,那么当您说
Tomcat或Spring没有特定的线程配置。
如果这意味着您正在默认的ThreadPoolExecutor
上运行,那么您应该检查如何配置线程池的文档和默认值,并相应地进行缩放。
@Async
注释还允许您指定要使用哪个bean Executor
。
// use default Executor
@Async
public void asyncMethodUsingDefaultExecutor() {}
// use of Executor with qualifier specificExecutorBeanQualifier
@Async("specificExecutorBeanQualifier")
public void asyncMethodUsingSpecificExecutor() {}
您可以使用它来使用一个分离的线程池来处理长期运行的任务,并为其他任务处理另一个任务。
https://stackoverflow.com/questions/72315030
复制相似问题