今天和分子公司合併服務接口(下降成本),對方反應我這邊有個服務慢,搞了一天,就順便記錄下
因爲生產機和測試機在機房處於不一樣網段,網絡環境質量有差別,最開始懷疑的是網絡致使的。分別在幾個環境中跑相同代碼,發現是網絡影響的調用三方服務返回時間波動。java
基於業務需求,更改調用三方服務方法爲異步調用。嗯!應該沒問題了。spring
進行優化驗證,發現調用平均時長有明顯下降(廢話)。可是,但但是,發現了新問題,在spring boot
啓動後第一次調用本服務,耗時仍舊遠遠高於後續調用,正常在20ms/次,第一次平均在600ms/次,因而開始googledocker
因而看到了這個提問
https://segmentfault.com/q/10...
在查看Dockerfile後,發現啓動腳本中有加以下參數shell
JAVA_ALL_OPTS=" -Djava.security.egd=file:/dev/./urandom "
繼而想修改docker基礎鏡像中jre的java.security文件
遂在Dockerfile中增長以下shellsegmentfault
sed -i "117csecurerandom.source=file:/dev/./urandom" /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security
就是用shell 替換了文本的內容網絡
其實,也沒有明顯的效率提高,服務首次加載仍是比以後慢。因此考慮,是否是文件是否是沒有改全(待完成,還沒驗證)dom
最後,經過驗證發現一個規律,假設有A B兩個服務,在Spring Boot 啓動後,
若是先首次訪問A,那麼B的首次訪問時間會縮短,可是仍是會高於第二次及之後的訪問時間
若是先首次訪問B,那麼A的首次訪問時間會縮短,可是仍是會高於第二次及之後的訪問時間異步
所以,在Spring boot啓動後,第一個被訪問的服務耗時必定大於第二個被訪問的服務,且每一個服務以後的訪問時間必定小於本服務第一次被訪問的時間。jvm
暫時就這麼多,這是個記錄。
以後會對基礎鏡像中jdk裏面的java.security進行修改,若是有效果 會再更新。測試
剛纔又找了一下,發現jdk目錄裏沒有java.security,是我秀逗了