記一次分析介面

  • 2022 年 9 月 21 日
  • 筆記

在偶然中發現一個介面耗時有點慢,用了4秒鐘

然後查詢了下,這個介面做的事有點多,即有介面調用,又有很多的查詢然後保存,所以單看程式碼或者時序圖的話很難看出

然後用了Arthas的分析了一下這個介面

啟動Arthas後選擇要分析的項目,然後使用trace功能,trace的功能是輸出方法內部調用路徑,並輸出方法路徑上的每個節點上耗時,很符合我這個場景

trace 命令能主動搜索 class-patternmethod-pattern 對應的方法調用路徑,渲染和統計整個調用鏈路上的所有性能開銷和追蹤調用鏈路

開啟trace

trace com.*** method

然後再次調用介面

image-20220921173414923

就可以看到這個介面下的調用鏈和耗時,很快就發現了耗時最高的介面,於是繼續trace這個介面,重複以上步驟,最終發現耗時的地方


竟然是兩個插入方法耗時最久

看了下表結構也沒有很多索引,而且數據量也不大只有幾萬條,把sql複製到資料庫中執行,也是正常的

看了下程式碼,這兩個插入是在循環中的,但是循環只有10多次,在本地測試了一下也是正常的

而且本地的介面總耗時才3537ms

Arthasdashboard看了下項目的資源情況

發現堆快滿了,而且只有100多m的記憶體,看了下啟動參數,只給這個項目指定了128m的記憶體。。

又看了下伺服器記憶體,也快被用完了

然後把這個項目移動資源比較足的伺服器,並且把記憶體擴大到256m

再次調用介面只用了1秒多,可看到資源對項目的影響