OkHttpClient調優案例

2022-07-08 13:03:11 字數 1187 閱讀 9296

實際案例

系統執行一段時間後,執行緒數量飆公升,cpu持續居高不下

排查工具

值得關注的指標:

pool和okhttp connectionpool佔了前兩位,由於很多同事開發的時候,沒有定義有意義的執行緒名稱,所以pool這2031個執行緒不好排查,

我們就從okhttp connectionpool這裡的執行緒數入手,很顯然,這裡是okhttp的使用問題,

所以,我們排查了一下系統中所有使用okhttp的地方,發現所有okhttpclient的用法都是這樣用的:

因為我們有好多的服務,每個服務都可能會用okhttpclient,所以圖中的gethttpclient()方法遍布各地,這個方法有什麼問題呢?

我們進到了okttpclient的原始碼中,看到了這個構造方法,找到了原因:

這個構造方法中,每次拿乙個okhttpclient客戶端,

就要new乙個connectionpool,

類似與每次new乙個thread就要new 乙個threadpool一樣,

而connectionpool完全是可以復用的,所以不需要new connectionpool,復用即可,

所以我們把okhttpclient的獲取邏輯修改成了以下:

即每個okhttpclient復用乙個connectionpool,

為了驗證,我特意在idea裡面寫了兩個小程式來實驗一下:

原始碼:okhttpclientnotsharepool

spark調優 shuffle調優

基於spark1.6 引數可以通過 new sparkcontext set 來設定,也可以通過命令的引數設定 conf spark.shuffle.file.buffer 預設值 32k 引數說明 該引數用於設定shuffle write task的bufferedoutputstream的buf...

Spark Spark調優 資源調優

spark在乙個executor的記憶體分為三塊,1.一塊是execution記憶體 2.一塊是storge 記憶體 3.一塊是其他記憶體 執行記憶體是執行記憶體,加入,聚合都是在這部分記憶體中執行.shuffle的資料也會先快取在這個記憶體中,滿了再寫入磁碟,能減少io,其實地圖過程也是在這個記憶...

spark調優 shuffle調優

每乙個shuffle的前半部分stage的task,每個task都會建立下乙個stage的task數量相同的檔案,比如下乙個stage會有100個task,那麼當前stage每個task都會建立100份檔案,會將同乙個key對應的values,一定是寫入同乙個檔案中的,也一定會將同乙個key對應的v...