天天看點

記一次分析接口

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

然後查詢了下,這個接口做的事有點多,即有接口調用,又有很多的查詢然後儲存,是以單看代碼或者時序圖的話很難看出

然後用了 ​

​Arthas​

​ 的分析了一下這個接口

啟動Arthas後選擇要分析的項目,然後使用 ​

​trace​

​ 功能,trace的功能是 ​

​輸出方法内部調用路徑,并輸出方法路徑上的每個節點上耗時​

​ ,很符合我這個場景

​trace​

​ 指令能主動搜尋 ​

​class-pattern​

​ / ​

​method-pattern​

​ 對應的方法調用路徑,渲染和統計整個調用鍊路上的所有性能開銷和追蹤調用鍊路

開啟trace

trace com.*** method      

然後再次調用接口

記一次分析接口

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

記一次分析接口
記一次分析接口

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

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

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

而且本地的接口總耗時才3537ms

用 ​

​Arthas​

​ 的 ​

​dashboard​

​ 看了下項目的資源情況

記一次分析接口

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

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

繼續閱讀