簡體   English   中英

如何在 Spring Boot 中優化異步線程

[英]How to optimize async threads in spring boot

我有在嵌入式 tomcat 中運行的 Spring Boot 應用程序。 大約有 50 個並發 HTTP 會話,每個會話由 5-7 個並發運行的異步后端調用 (@Async) 提供服務。 Tomcat 或 Spring Boot 沒有特定的線程配置。

我發現長時間運行的線程(不管是 Tomcat 還是異步調用)嚴重降低了其他線程的性能。 例如,如果我使用 CR JRC 生成報告需要 20-40 秒,那么大多數異步線程看起來都處於癱瘓狀態。

如何優化代碼和配置以解決性能問題?

根據您的描述,您的配置中可能存在多個瓶頸。 但其中之一可能是系統中可用的線程數。 您可以從這里做的最好的事情是分析您的應用程序並檢查哪些線程可用,它們是如何使用的,以及它們在哪里阻塞。

此外,假設線程數是問題,那么當你說

Tomcat 或 Spring Boot 沒有特定的線程配置。

如果這意味着您在默認的ThreadPoolExecutor上運行,那么您應該查看有關如何配置線程池的文檔默認值,並相應地進行擴展。

@Async注解還允許您指定要使用的 bean Executor

// use default Executor
@Async
public void asyncMethodUsingDefaultExecutor() {}

// use of Executor with qualifier specificExecutorBeanQualifier 
@Async("specificExecutorBeanQualifier")
public void asyncMethodUsingSpecificExecutor() {}

您可以使用它來擁有一個單獨的線程池來處理長時間運行的任務,另一個用於其他任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM