如何排查 Tomcat 8 上的连接性能问题?



我刚刚安装了一台新服务器(Xeon E5-2630 v4,256GB RAM,Ubuntu 18,Tomcat 8,Java 8)来替换当前4年前的服务器(i5-2400,8GB RAM,Ubuntu 14,Tomcat 7,Java 7),并且在测试过程中发现在一个大型测试页面上,新服务器比旧服务器慢10倍以上。稍后进行一些挖掘,在我的开发机器(Java 8)上运行Tomcat 8(使用apt-get安装)也是如此,但在运行Spring Tool Suite捆绑的tc服务器(也基于Tomcat8

!示例页面上的测试结果。所有 4 个实例上的 Spring 应用程序战争文件相同。在本地运行,应用程序在控制器中记录页面生成时间,并且在所有 4 个上大致相同,因此问题必须出在 jsp 生成或(很可能是 imo)在连接中:

time wget http://localhost:8080/proteus/testpage 
  • 旧服务器:4,643,048 字节 5.88M/s 在0.8s
  • 新服务器:4.43M 276KB/s16秒
  • Dev Machine tcServer(基于 Tomcat8):4.43M 4.24MB/s 在1.0 秒内
  • 开发机器雄猫 8:4.43M 318KB/s14 秒

对于同一台机器上的这么大的差异,我一定在连接设置/配置中缺少一些非常基本的东西,但我在过去 2 天的大部分时间里一直在进行故障排除,但没有取得任何进展。

如果有人对看什么有任何建议,我将不胜感激。在开发机器上工作似乎最简单,所以我从那里附加了一些信息。

问候。


堆在 tcServer 上设置为 -Xmx768m,在 Tomcat 8 上设置为 -Xmx2048m。

tc服务器版本信息:

Using CATALINA_BASE:   /home/mjames/sts-bundle/pivotal-tc-server-developer-3.1.5.RELEASE/tomcat-8.0.36.A.RELEASE
Using CATALINA_HOME:   /home/mjames/sts-bundle/pivotal-tc-server-developer-3.1.5.RELEASE/tomcat-8.0.36.A.RELEASE
Using CATALINA_TMPDIR: /home/mjames/sts-bundle/pivotal-tc-server-developer-3.1.5.RELEASE/tomcat-8.0.36.A.RELEASE/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/mjames/sts-bundle/pivotal-tc-server-developer-3.1.5.RELEASE/tomcat-8.0.36.A.RELEASE/bin/bootstrap.jar:/home/mjames/sts-bundle/pivotal-tc-server-developer-3.1.5.RELEASE/tomcat-8.0.36.A.RELEASE/bin/tomcat-juli.jar
Server version: Pivotal tc Runtime 3.1.5.RELEASE/8.0.36.A.RELEASE
Server built:   Jun 29 2016 20:36:49 UTC
Server number:  8.0.36.0
OS Name:        Linux
OS Version:     4.4.0-116-generic
Architecture:   amd64
JVM Version:    1.8.0_162-8u162-b12-0ubuntu0.16.04.2-b12
JVM Vendor:     Oracle Corporation

雄猫8版本信息:

Using CATALINA_BASE:   /usr/share/tomcat8
Using CATALINA_HOME:   /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.32 (Ubuntu)
Server built:   Sep 27 2017 21:23:18 UTC
Server number:  8.0.32.0
OS Name:        Linux
OS Version:     4.4.0-116-generic
Architecture:   amd64
JVM Version:    1.8.0_162-8u162-b12-0ubuntu0.16.04.2-b12
JVM Vendor:     Oracle Corporation

来自服务器的连接器.xml(两者相同,将它们剥离到基本)

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  
URIEncoding="UTF-8" redirectPort="8443" />

检查默认值

Tomcattc Server被打包为不同的产品:

  • Tomcat是非常通用和高度可配置的servlet容器。

  • tc 服务器是一个更完整、更能生产就绪的 Tomcat 兼容应用服务器。

有关 2 台服务器的更广泛比较,请参阅此处。

因此,它们的默认值是不同的。默认情况下,Tomcat被配置为较小的东西,而tc Server默认做出更大胆的假设。

请参阅 Tomcat 的默认属性与 tc 服务器的默认属性(在可用选项数量引起的眩晕消退后),例如,请参阅 Tomcat的最大线程数为 200,而tc 服务器使用300

可以想象,有许多设置会影响测试页面的性能

找到了一个解决方案,如果不是确切的答案 - 我从来没有深入了解 tomcat 8.0 的问题,但我在新服务器上从 tar 文件安装了 8.5.29,性能还可以。测试页面下载时间为 2 秒(而不是 Tomcat 16 上的 8.0 秒)仍然比英国的旧页面慢一点,但它在德国,至少是可以接受的,我可以尝试在以后进一步优化......

完全相同的JRE(OpenJDK 1.8.0_162),War文件和服务器.xml,其他一切都是默认配置,除了 setenv.sh 中的以下内容

CATALINA_OPTS="-Xmx4096m -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.1,TLSv1.2 -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 -Djava.awt.headless=true"

最新更新