2016-09-19 79 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应用程序 –