記一次分析介面
- 2022 年 9 月 21 日
- 筆記
在偶然中發現一個介面耗時有點慢,用了4秒鐘
然後查詢了下,這個介面做的事有點多,即有介面調用,又有很多的查詢然後保存,所以單看程式碼或者時序圖的話很難看出
然後用了Arthas
的分析了一下這個介面
啟動Arthas後選擇要分析的項目,然後使用trace
功能,trace的功能是輸出方法內部調用路徑,並輸出方法路徑上的每個節點上耗時
,很符合我這個場景
trace
命令能主動搜索class-pattern
/method-pattern
對應的方法調用路徑,渲染和統計整個調用鏈路上的所有性能開銷和追蹤調用鏈路
開啟trace
trace com.*** method
然後再次調用介面
就可以看到這個介面下的調用鏈和耗時,很快就發現了耗時最高的介面,於是繼續trace這個介面,重複以上步驟,最終發現耗時的地方
竟然是兩個插入方法耗時最久
看了下表結構也沒有很多索引,而且數據量也不大只有幾萬條,把sql複製到資料庫中執行,也是正常的
看了下程式碼,這兩個插入是在循環中的,但是循環只有10多次,在本地測試了一下也是正常的
而且本地的介面總耗時才3537ms
用Arthas
的dashboard
看了下項目的資源情況
發現堆快滿了,而且只有100多m的記憶體,看了下啟動參數,只給這個項目指定了128m的記憶體。。
又看了下伺服器記憶體,也快被用完了
然後把這個項目移動資源比較足的伺服器,並且把記憶體擴大到256m
再次調用介面只用了1秒多,可看到資源對項目的影響