前提:
1.公司進行一台部署有http服務的壓測,第一天進行了一整晚(10h)的測試(一次200並發),吞吐量大概56 %左右。第二天(期間沒有重啟過tomcat)也進行了一整晚(10h)測試(一次200並發),吞吐量卻降低至16%左右。環境一樣,為何落差那麼大?
2.我第一天壓測1000個並發時,線程數大概是1000 ,但是第二天(期間沒有重啟過tomcat)壓測1000並發時,線程數卻降到700 ,為何之前並發數和線程數成正比,後面卻不是了?
上述兩個前提,請問tomcat是有什麼策略,還是jdbc連接池或redis連接池導致上述現象嗎(使用G1回收機制)?
這情況就複雜了,其複雜度取決於你的專案運作環境、依賴哪些其他服務。如果你的壓測環境複雜(就是很多人在你這台伺服器上運作自己的東西),那麼壓測結果不穩定是可以預見的。
遇到吞吐量下降時,先判斷瓶頸在哪裡:
本機資源是否緊張。本機資源主要包括 CPU、記憶體、網路頻寬和磁碟吞吐。這些都需要進行觀測檢查。
依賴服務是否緊張,如資料庫、外部介面是否處理時間過長。
如果這些都無法明顯定位問題所在,那就進入程序調試階段了:在每個請求處理過程中,記錄每一步的時長,找出瓶頸在哪一步,這個粒度會很細,會要反復修改日誌,反覆運行,反覆觀察,但一定會找到問題。
不要一遇到問題就做沒有根據的胡亂猜測,這時候「發散思維」幫不上忙,要做的是對問題順藤摸瓜,嚴謹分析。