2016-09-19 82 views
0

我在安裝在Nginx代理後面的5個EC實例(m4.4xlarge)上安裝了Spring應用程序(使用SpringBoot版本1.3.6.RELEASE)。所有的實例都運行Ubuntu 14.04。Spring應用程序在響應請求時顯示間歇性延遲

開始使用java -jar API-0.0.1-SNAPSHOT.jar -Xms8192m -Xmx16384m -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses

當我從本地實例中的一個查詢API,以確保該實例運行起來,達4秒的間歇延遲的應用程序之前,應用程序響應被示出請求。該請求從本地實例啓動到本地實例。

要調用API,我執行DATE=$(date +"%Y%m%d%H%M%S"); echo $DATE; curl -XGET http://xxxx:9998/api/ping --header "Content-Type:application/json"(其中xxxx是實例的私有IP地址)。 api/ping端點只返回一個pong值,不接觸數據庫或文件系統。

嵌入式Tomcat的訪問日誌也顯示處理請求的延遲。

access log

tcpdump的看起來如下這也反映了端口上的延遲。

tcpdump

我已經試過

  • TCPv6是我測試
  • 的net.ipv4.tcp_fin_timeout參數設置爲30
  • 實例禁用讓嵌入式Tomcat服務器聽一個特定的地址(不是*)
  • 試圖擴展Tomcat的最小線程數
  • 增加超時值Tomcat服務器

的API我的本地開發機器上一致響應(當然它!)

的問題是在處理請求的間歇延誤。 API響應的速度在可接受的參數範圍內,但間歇性延遲導致API響應時間大幅延遲。

--- UPDATE 20/9

我設法模仿我的本地計算機上的問題。如果應用程序使用mvn spring-boot:run運行,則在調用API時不會出現延遲。但是,當使用java -jar API-0.0.1-SNAPSHOT.jar開始應用程序時,可以看到延遲。

回答

0

我用我維護的彈簧引導服務遇到了這個問題。

我將日誌讀回到高延遲開始的位置,並將其縮小到我們將版本8.0.26更新至版本8.0.36時的tomcat-embed-jasper

我不能確切地告訴你爲什麼這樣做,但當我們回滾時,我們的延誤立即消失。

+0

謝謝,我會看看。我們最終在獨立的tomcat安裝中安裝了spring-boot應用程序 –