日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、前言

應用連接數據庫基本上都是通過連接池去連接,比如常用的 HikariCP、Druid 等,在應用運行期間經常會出現獲取連接很慢的場景,大多數同學都是一頭霧水,不知道從哪下手。而且很多時候都是偶發場景,讓人頭疼不已,別著急,本文帶你逐步剖析獲取連接慢的所有可能的原因,以及對應的調優手段,讓你成為連接池排障大師。

二、連接池監控

排查問題的前提是發現問題,所以首先需要有連接池的詳細監控,下面我們以 HikariCP 為例,簡單介紹幾個常用的指標的含義。

一次性講清楚「連接池獲取連接慢」的所有原因

一次性講清楚「連接池獲取連接慢」的所有原因

一次性講清楚「連接池獲取連接慢」的所有原因

對應應用程序比較敏感的時間就是獲取連接耗時,因為它是同步的會直接影響鏈路的RT,下面我們就來逐步分析造成這個獲取連接耗時較高的所有可能性以及解決方案。

三、排查思路

連接池存在等待連接

獲取連接耗時較高最直接的原因就是存在等待連接數,這種情況直接觀測等待連接數的大盤即可

一次性講清楚「連接池獲取連接慢」的所有原因圖片

那么又有哪幾種情況會導致存在等待連接數呢?

  • 連接池容量過小

如果日常的活躍連接數/總連接比例持續很高,或者 QPS * AVG-RT(s) > 連接總數說明當前連接池的最大連接數已經不足以支撐當前的流量,如何解決?

適當增加連接池最大連接數:連接數也不是越大越好,一般是根據 CPU 核數決定,HikariCP 官方給出了一個公式可以做一下參考,最大連接數一般不要超過 50。

core_count 為core的數量 effective_spindle_count 為掛載的磁盤數量。
core_count 為core的數量 effective_spindle_count 為掛載的磁盤數量。
  • 應用擴容:如果連接數調大后,仍然無法解決,說明單機的連接數已經達到上限,需要對應用進行擴容,但是需要注意擴容節點的數量,單機連接數*節點數量不要超過數據庫支持的最大連接數

有慢查詢&長事務

  • 慢SQL

慢 SQL 相對來說比較好排查,數據庫或者數據庫中間件都有成熟的慢 SQL 采集工具。只需要分析一下指定時間段內是否有慢 SQL 即可。 如果SQL 優化空間比較低,可以把慢 SQL 和核心業務分 2 個數據源,防止慢 SQL 影響正常核心業務。

  • 長事務

長事務是很容易忽略的一種 case,可以通過觀測連接使用時間指標和 SQL 耗時來分析,如果連接使用平均耗時遠大于 SQL 平均耗時,那么說明有長事務。還可以根據 HikariCP 自帶的連接泄露檢測來分析,當連接被借出后長時間未歸還(超過配置的閾值 leak-detection-threshold=30000)會打印借出時的堆棧,可以幫助我們快速定位。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

還可以通過 RDS 的 SQL 洞察來分析是否有長事務,如果使用 Spring+JDBC 管理事務的情況下,開啟事務的命令是 SET autocommit=0,提交事務是 commit,這里根據數據庫線程 ID 來逐個分析,提交事務的時間-開啟事務的時間=事務持續時間。

一次性講清楚「連接池獲取連接慢」的所有原因

應用負載過高

由于 HikariCP、Druid 在從連接池借出連接時,會有一個同步探活的操作,比如直接 MySQL 的 PING 命令或執行 select 'X' 等,因為有網絡 IO,所以這里會讓當前線程進入阻塞狀態讓出 CPU 時間片。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

在 CPU 繁忙時,執行完網絡 IO 后等待獲取 CPU 時間片的時間較長,最終表現的結果就是獲取連接時間拉長。這種 case 的分析手段比較簡單,直接通過觀測應用的 CPU 和 Load 指標即可。

應用STW

在獲取連接方法開始到結束期間,如果應用發生了 STW,就會導致獲取連接耗時升高,需要結合 JVM 監控 &GC 日志來分析,關于 GC 分析不是本文重點,這里簡單列舉幾個重點說明一下(以 ZGC 舉例)。

  • JVM 監控存在 Allocation Stall(垃圾回收阻塞,會暫停線程)或者暫停時間較長。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

一次性講清楚「連接池獲取連接慢」的所有原因圖片

  • GC 日志相對于監控會更為準確一點,把日志文件直接丟到 https://gceasy.ycrash.cn/ 里面分析一下即可,會輸出詳細的報告,重點關注一下 STW 時間和分配阻塞。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

一次性講清楚「連接池獲取連接慢」的所有原因圖片

網絡阻塞

這一類問題比較難以排查,具有偶發性和難以觀測的特點,網絡阻塞也分好幾種情況。

  • 網絡抖動

這是最常見的一種情況,一般我們可以通過觀測應用所在主機的 TCP 重傳監控是否有尖刺,但這里要注意下,TCP 重傳不代表一定是網絡抖動,也可能是網絡帶寬打滿或者數據庫 &DAL 異常。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

除了監控還可以通過網絡循環抓包來分析(主要磁盤容量不要保留太多文件),可以參考以下命令。

抓取 3306 端口的網絡包,存儲到 3306.pcap 文件中,-C 50 -W 10 代表一個文件最大 50M,最多保留 10 個 tcpdump -i eth0 port 3306 -w 3306.pcap -C 50 -W 10。

然后導入到 WireShark 工具中分析,重點關注 TCP Retransmission 即 TCP 重傳。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

  • 網絡阻塞

如機器帶寬打滿,具體表現也是 TCP 重傳,這里可以觀測機器的帶寬監控和機器支持的最大帶寬做對比,看看是否超過限制。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

數據庫&數據庫中間件異常

當數據庫或者數據庫中間件出現異常時,對于上游應用的表現大多數就是 SQL RT 增高、TCP 重傳。如果懷疑是數據庫或者數據庫中間件出現異常,可以先確定自己的應用連的是哪個庫,這里可以通過應用監控(上下游 -RDS)直觀的看到應用連接的具體的庫信息,然后再觀測對應 RDS 和數據庫中間件的監控進一步分析。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

  • 如果是數據庫中間件域名,就可以看數據庫中間件的監控大盤。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

如果數據庫中間件本身沒有異常,可以繼續下鉆到 RDS。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

  • 如果是 RM/RR 開頭的,說明連的是 RDS,可以看阿里云的 RDS 監控,把下面的 Rdsid 替換一下即可。
https://rdsnext.console.aliyun.com/detAIl/{替換成rdsId}/performance?reginotallow=cn-hangzhou&DedicatedHostGroupId=

重點觀測 CPU內存利用率 & IOPS 使用率,也可以框選指定時間段進行自動診斷。

一次性講清楚「連接池獲取連接慢」的所有原因圖片

四、總結

本文列舉了幾乎所有可能導致連接池獲取連接慢的 case,相信看完的讀者以后再遇到此類問題時,再也不會一頭霧水了。學會自助排查,不光可以提升自己的排障能力,同時也能減輕各位中間件 &DBA 小伙伴的客服壓力。

參考文檔:https://Github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

分享到:
標簽:連接池
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定