昨天接到生產 SkyWalking 鏈路監控告警: 服務的百分位數響應時間在過去的 10 分鐘內超過 2000 毫秒的次數達到 3 次。
經過不斷的優化,將接口從 9000ms 優化到 180ms,先看結果
優化前:

優化后:

廢話不多我們開始
一、定位性能差的代碼
我用的阿里的 Arthas,下載地址:https://arthas.aliyun.com/doc/download.html
簡單說下步驟:
打開命令窗口,執行 jps 查看 Java 進程號 pid
在命令窗口執行
as.bat pid
回車會打開一個頁面,頁面即 arthas 命令窗口
在 arthas 命令窗口,執行
trace com.PublicController login
可以看方法耗時
二、性能優化方案
-
根據業務優化,業務上只需要 1 條數據,代碼中卻查了所有

-
減少不必要的 RPC 調用,如果必須查,通過一組條件查,加緩存

-
不要在循環中查庫,可以把符合條件的數據查出來放 map 中,以空間換時間

-
事務失效,每次查詢獲取新連接。同樣要避免長事務。

-
增加數據庫索引(覆蓋索引),減小鎖粒度,防止后面并發大導致死鎖問題
-
修改打開文件符數量,支持高并發
-
使用連接池,重用連接,避免重復創建的性能損耗
-
異步化
-
批量存儲
總結
總的來說,接口性能優化是一個不斷迭代的過程,我將繼續努力,不斷提升系統的性能,為用戶提供更加流暢、高效的使用體驗。希望我的經驗能夠對大家在項目中遇到類似問題時提供一些啟示。
本文由 mdnice 多平臺發布