一次spring boot web服務響應緩慢的排查


  使用spring boot搭建了一個web服務,部署在docker容器中。使用中出現了一個性能問題:多次接口請求中,偶爾會出現一次響應非常慢的情況。正常情況下接口的響應時間在10-20ms,偶爾會出現一次3s以上的響應。下面是自己的一個排查過程

  1、驗證本地開發環境。

  首先考慮的是在本地開發環境中找出問題所在。經過測試,本地並未出現這個問題。

  2、數據庫優化。

  考慮到本地開發環境和部署的版本使用的數據庫不同。通過建立索引,查詢優化等方案,對數據庫的查詢進行了優化。然而問題依舊。

  3、添加詳細日志,定位問題

  首先考慮的是業務代碼可能存在問題,通過分析日志,發現響應慢的並不是業務代碼,而是spring boot框架中的代碼。主要耗時在過濾器和攔截器中。

  4、添加gc日志

  考慮可能由於過一段時間會出現一次gc,接口也是偶爾出現一次響應慢的情況,猜測兩者可能有關系。通過日志發現,響應慢的時候並不一定出現gc,並且每次gc的時間都很短,在ms級別。

  5、更換servlet容器

  spring boot內置了多個servlet容器,默認使用的是tomcat。從上面日志定位的情況來看,servlet容器可能是主要原因。把tomcat換成undertow之后,問題得以解決,響應時間都固定在10-20ms范圍。

  6、為什么tomcat會出現這個問題,后續還需要分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM