排查和解決線程池瓶頸問題案例

在分布式系統中,線程池的使用非常普遍,尤其是在處理異步任務時。然而,線程池的配置不當可能會導致性能瓶頸,進而影響系統的整體性能。本文將分享一個實際案例,介紹如何通過日志分析和線程池優化來解決系統中的性能瓶頸問題。

問題背景

在我們的系統中,有一個基于Spring的事件監聽機制,用于處理長連接消息的回調。事件監聽器RawMessageEventListener通過onApplicationEvent方法處理事件。默認情況下,onApplicationEvent是同步執行的,但為了提升性能,我們使用了@Async注解將其改為異步執行。異步任務默認使用threadPoolTaskScheduler線程池。

在某天的10點左右,我們注意到系統的響應速度變慢,通過日志分析發現,threadPoolTaskScheduler線程池的處理能力成為了瓶頸。

問題排查

日志分析

首先,我們通過以下命令對日志進行分析:

tail -10000000 info-2025-02-23.log | grep '2025-02-23 10:' | grep 'threadPoolTaskScheduler' | awk '{print $4}' | sort | uniq -c

輸出結果如下:

46586 [threadPoolTaskScheduler-1]

從日志中可以看到,在10點這個時間段內,threadPoolTaskScheduler線程池處理了4萬多條日志,但只有一個線程在工作。這表明線程池的默認配置可能不足以應對高并發場景。

代碼分析

我們進一步查看了事件監聽器的代碼:

@Async
public void onApplicationEvent(RawMessageEvent event) {// 處理事件邏輯ThreadPoolManager.getInstance().execute(() -> robotCallBackService.callBack(socketId, request, url));
}

@Async注解默認使用threadPoolTaskScheduler線程池,而該線程池的默認線程數為1。這意味著所有異步任務都會排隊等待執行,導致任務積壓,進而影響系統性能。

解決方案

增加線程池線程數

為了解決這個問題,我們決定自定義threadPoolTaskScheduler的配置,增加線程池的線程數。我們創建了一個配置類,設置了10個線程:

@Configuration
public class SchedulerConfig {@Beanpublic ThreadPoolTaskScheduler threadPoolTaskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();scheduler.setPoolSize(10);scheduler.setThreadNamePrefix("CustomTaskScheduler-");return scheduler;}
}

通過這個配置,我們為threadPoolTaskScheduler線程池設置了10個線程,從而提升了并發處理能力。

驗證效果

在應用了新的線程池配置后,我們再次觀察系統的日志和性能。發現threadPoolTaskScheduler線程池能夠同時處理多個任務,系統的響應速度明顯提升,任務積壓的問題得到了有效緩解。

結論

通過這次排查和優化,我們認識到線程池的配置對系統性能有著重要影響。在高并發場景下,默認的線程池配置可能無法滿足需求,因此需要根據實際情況進行調整。通過自定義線程池配置,我們成功解決了系統中的性能瓶頸問題。

關鍵點總結

  1. 日志分析:通過日志分析發現線程池的瓶頸。
  2. 代碼審查:確認@Async注解默認使用的線程池配置。
  3. 自定義線程池:通過自定義配置增加線程池的線程數,提升并發處理能力。
  4. 驗證效果:通過日志和性能監控驗證優化效果。

希望這個案例能夠幫助大家在遇到類似問題時,快速定位并解決問題。如果你有類似的經驗或其他優化方案,歡迎在評論區分享!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70727.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

影響板材的熱導率有哪些因素?

板材熱導率受多種因素左右,可劃分為內部材料特性與外部環境條件兩大方面 內部材料特性 化學構成:不同化學元素及化合物組合形成的板材,熱導率表現大相徑庭;金屬板材,像銅與鋁,熱導率優異,這是…

給字符串加密解密

加密規則:輸入1a2b3c 輸出 abbccc 解密:輸入abbccc 輸出 1a2b3c 代碼: using System;namespace 加密解密 {class Program{static void Main(string[] args){Encryption("4b2a8p");Decryption("ppppppoovvv");Console.…

人工智能中的特征是什么?

什么是人工智能中的特征? 在人工智能中,特征(feature)是指從原始數據中提取出的、能夠代表數據關鍵信息并用于模型訓練的屬性或變量。特征通常是對原始數據的抽象或轉換,目的是捕捉數據中的模式、結構或相關性&#x…

20250226-代碼筆記05-class CVRP_Decoder

文章目錄 前言一、class CVRP_Decoder(nn.Module):__init__(self, **model_params)函數功能函數代碼 二、class CVRP_Decoder(nn.Module):set_kv(self, encoded_nodes)函數功能函數代碼 三、class CVRP_Decoder(nn.Module):set_q1(self, encoded_q1)函數功能函數代碼 四、class…

洛谷 P3628/SPOJ 15648 APIO2010 特別行動隊 Commando

題意 你有一支由 n n n 名預備役士兵組成的部隊,士兵從 1 1 1 到 n n n 編號,你要將他們拆分成若干特別行動隊調入戰場。出于默契的考慮,同一支特別行動隊中隊員的編號應該連續,即為形如 i , i 1 , ? , i k i, i 1, \cdo…

PCL源碼分析:曲面法向量采樣

文章目錄 一、簡介二、源碼分析三、實現效果參考資料一、簡介 曲面法向量點云采樣,整個過程如下所述: 1、空間劃分:使用遞歸方法將點云劃分為更小的區域, 每次劃分選擇一個維度(X、Y 或 Z),將點云分為兩部分,直到劃分區域內的點少于我們指定的數量,開始進行區域隨機采…

Go語言--語法基礎2--下載安裝

2、下載安裝 1、下載源碼包: go1.18.4.linux-amd64.tar.gz。 官方地址:https://golang.google.cn/dl/ 云盤地址:鏈接: https://pan.baidu.com/s/1N2jrRHaPibvmmNFep3VYag 提 取碼: zkc3 2、將下載的源碼包解壓…

lowagie(itext)老版本手繪PDF,包含頁碼、水印、圖片、復選框、復雜行列合并等。

入口類:exportPdf ? package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

3-2 WPS JS宏 工作簿的打開與保存(模板批量另存為工作)學習筆記

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

Ubuntu20.04之VNC的安裝使用與常見問題

Ubuntu20.04之VNC的安裝與使用 安裝圖形桌面選擇安裝gnome桌面選擇安裝xface桌面 VNC-Server安裝配置開機自啟 VNC Clientroot用戶無法登入問題臨時方案永久方案 安裝圖形桌面 Ubuntu20.04主流的圖形桌面有gnome和xface兩種,兩種桌面的安裝方式我都會寫&#xff0c…

Day46 反轉字符串

I. 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 class Solution {public void reverseString(char[] s) {int i …

用FileZilla Server 1.9.4給Windows Server 2025搭建FTP服務端

FileZilla Server 是一款免費的開源 FTP 和 FTPS 服務器軟件,分為服務器版和客戶端版。服務器版原本只支持Windows操作系統,比如筆者曾長期使用過0.9.60版,那時候就只支持Windows操作系統。當時我們生產環境對FTP穩定性要求較高,比…

【愚公系列】《Python網絡爬蟲從入門到精通》033-DataFrame的數據排序

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

營銷過程烏龜圖模版

營銷過程烏龜圖模版 輸入 公司現狀產品服務客戶問詢客戶期望電話、電腦系統品牌軟件硬件材料 售前 - 溝通 - 確定需求 - 滿足需求 - 售后 機料環 電話、電腦等設備軟件硬件、系統品牌等工具材料 人 責任人協助者生產者客戶 法 訂單由誰評審控制程序營銷過程控制程序顧客滿意度…

Kubernetes (K8S) 高效使用技巧與實踐指南

Kubernetes(K8S)作為容器編排領域的核心工具,其靈活性和復雜性并存。本文結合實戰經驗,從運維效率提升、生產環境避坑、核心功能應用等維度,總結高頻使用技巧與最佳實踐,分享如何快速掌握 K8S。 一、kubect…

Idea java項目結構介紹

一般來說,一個典型的 IntelliJ IDEA Java 項目具有特定的結構,以下是對其主要部分的介紹: 項目根目錄 項目的最頂層目錄,包含了整個項目的所有文件和文件夾,通常以項目名稱命名。在這個目錄下可以找到.idea文件夾、.g…

C++大整數類的設計與實現

1. 簡介 我們知道現代的計算機大多數都是64位的,因此能處理最大整數為 2 64 ? 1 2^{64}-1 264?1。那如果是超過了這個數怎么辦呢,那就需要我們自己手動模擬數的加減乘除了。 2. 思路 我們可以用一個數組來存儲大數,數組中的每一個位置表…

2024年第十五屆藍橋杯大賽軟件賽省賽Python大學A組真題解析

文章目錄 試題A: 拼正方形(本題總分:5 分)解析答案試題B: 召喚數學精靈(本題總分:5 分)解析答案試題C: 數字詩意解析答案試題A: 拼正方形(本題總分:5 分) 【問題描述】 小藍正在玩拼圖游戲,他有7385137888721 個2 2 的方塊和10470245 個1 1 的方塊,他需要從中挑出一些…

開源RAG主流框架有哪些?如何選型?

開源RAG主流框架有哪些?如何選型? 一、開源RAG框架全景圖 (一)核心框架類型對比 類型典型工具技術特征適用場景傳統RAGLangChain, Haystack線性流程(檢索→生成)通用問答、知識庫檢索增強型RAGRAGFlow, AutoRAG支持重排序、多路召回優化高精度問答、復雜文檔處理輕量級…

Java SE與Java EE

Java SE(Java 平臺標準版) Java SE 是 Java 平臺的核心,提供了 Java 語言的基礎功能。它包含了 Java 開發工具包(JDK),其中有 Java 編譯器(javac)、Java 虛擬機(JVM&…