文章目錄
- 背景
- 分析
- 思路 1:DeepSeek 分析
- 思路 2:日志分析
- 思路 3:Arthas 分析
- 下載 Arthas
- 啟動 Arthas
- trace 調用耗時分析
- Controller 調用耗時
- Service 調用分析
- ServiceImpl 耗時分析
- IService 耗時分析
- BaseMapper 耗時分析
- debug 執行鏈路
- MyBatisMapperProxy 解讀
- 解決
- 思路 1:預熱 MyBatisPlus
- 思路 2:預熱 DispatcherServlet
- 完整案例
- 優化代碼
- 優化效果
- 參考
背景
項目技術框架:Spring Boot 2.7.17 + Druid 1.2.24 + MyBatisPlus 3.5.4。
?? 存在的問題:第 1 次 接口查詢比較慢,后面的接口調用速度正常。
比如,某個分頁查詢接口,第 1 次調用耗時 600ms,第 2 次及之后耗時 150ms。
分析
分析前提:SpringBoot 連接的外部組件,比如 Redis、MySQL 盡量使用本地連接,減少因為網絡波動產生的影響。
思路 1:DeepSeek 分析
DeepSeek 各種搜索,各種配置修改,但是總感覺沒有對癥下藥。
摸索了很久,沒有啥用,根本找不到癥結在哪里。
思路 2:日志分析
添加 debug: true
配置到 yml 配置文件中,將程序改為 debug 模式。
試了下,接口請求時,雖然能看到兩段日志之間耗時較大,但是找不到是哪里慢。