公司的後端服務最近一直請求逾時, 最後幹脆挂掉了, 查到當機的關鍵日志: Maximum number of threads (3000) created for connector with address /172.25.109.83 and port 8080
大概意思是線程用完了, 是以第一次使用jstack列印出服務的Java堆棧資訊, 配合tda-bin-2.2(看ThreadDump檔案)效果更佳
操作步驟
jstack 10122 > js1
使用tda打開Dump檔案,可以看到有3000多個線程locking,等待的對象是 com.mchange.v2.resourcepool.BasicResourcePool,初步分析是連接配接池C3P0導緻的, 完美的解決辦法是找出造成死鎖的功能而快捷的是更新連接配接池(C3P0确實有點老了)
選擇更新為bonecp, 原因兩點1.BoneCP 不用 synchronized 關鍵字來處理多線程對資源的争用, 2. 分區機制,盡管使用了鎖,但還是存在着資源争用的問題,是以 BoneCP 可配置多個連接配接池分區,每個分區獨立管理,互不影響.
tda 下載下傳: https://download.csdn.net/download/gjuse/10481327 tda視角
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwFbOhFZxRmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOyIzM1QzM2ETNxYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)