天天看點

jstack和TDA進行java線程dump分析

公司的後端服務最近一直請求逾時, 最後幹脆挂掉了, 查到當機的關鍵日志:  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視角

jstack和TDA進行java線程dump分析