線上bug導致tomcat 線程池堆積

線上bug導致tomcat 線程池堆積


事情經過

今天早上項目搜索頁偶現504 頁面!

504

馬上查看線上日誌 發現大量的 ConnectionTimeOut 異常.
裏面跟蹤下代碼

RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(10000).build();

ConnectionTimeOut 居然是10s

這個時候能確定2個問題:
- 第三方接口存在不可用情況
- 自身應用timeout設置過長
難道就是這個原因導致的?
仔細分析了下 發現 出現ConnectionTimeOut異常的地方並
不是搜索頁的功能.而是一個依賴於第三方接口用戶綁定功能.
這個時候很迷惑了.
到底是什麼原因呢?

查看線程堆棧

通過查看線程堆棧
這裏寫圖片描述

發現大量的線程都wait在httpGet在第三方接口上

我們看下線程樹
這裏寫圖片描述

發現一共有920上下的線程數目

我們在來看下容器(tomcat)的線程數
這裏寫圖片描述


容器處理請求的線程數最大是1000個.
這個時候我們就可以大膽猜測
就是大量的第三方接口請求
導致耗光了容器的線程池.所以其他請過過來,
只能等待線程池中資源釋放 才能正常處理.

驗證

  • 修改connectionTimeOut時間爲1000
  • 重啓應用
    ok 業務恢復正常了。線程數也降下來了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章