高併發下restTemplate的錯誤分析

2021-09-21 18:20:11 字數 685 閱讀 8037

org.apache.http.conn.connectionpooltimeoutexception: timeout waiting for connection
此問題很明顯是連線等待超時,而且是從連線池中獲取的連線。

那麼就有乙個很詫異的問題,這裡哪來的連線池呢?然後我去跟蹤resttemplate的原始碼發現,其底層是通過apache 的httpclient實現了連線池。那麼問題就很明顯了。就是在併發量高的時候,可能會出現連線池不夠用。

既然分析出來是連線池不夠了,那麼我們在構建resttemplate的時候配置其底層的httpclient連線池大小,以便提高高併發的時候resttemplate的效能。

可以通過配置總體最大連線池(maxconntotal)和單個路由連線最大數(maxconnperroute),預設是(20,2)

maxconntotal 是整個連線池的大小,根據自己的業務需求進行設定

maxconnperroute 是單個路由連線的最大數,可以根據自己的業務需求進行設定

public resttemplate resttemplate()

這樣就可以解決高併發下resttemplate連線池不夠的問題。提高其效能,使得呼叫resttemplate的程式效能------>

高併發下搶購

了解高併發以及怎麼處理後,測試一下專案中下單的 邏輯很簡單,goods表中stock設定為unsigned。剛開始你可能會覺得這樣會出現超單的情況,但是測試後,沒有出現超單的情況。看似沒有問題,但是看過日誌發現問題還挺多的。這之前請看下這篇文章裡面有處理高併發下單的情況。goods id num g...

高併發下的HashMap

1.hashmap在插入元素過多的時候需要進行resize,resize的條件是 hashmap.size capacity loadfactor。2.hashmap的resize包含擴容和rehash兩個步驟,rehash在併發的情況下可能會形成鍊錶環 hashmap進行儲存時,假設size超過當...

高併發下的MySQL

對於遊戲來說,db存在大量的insert update 可謂玩家的很多動作都會與db溝通。本文暫時忽略os 中的 io利用率,網絡卡流量,cpu變化情況,介紹如何檢視mysql部分引數 檢視每秒事務數 show global status like com commit show global st...