如何对 Tomcat 8 上的连接性能进行故障排除?

Posted

技术标签:

【中文标题】如何对 Tomcat 8 上的连接性能进行故障排除?【英文标题】:How to troubleshoot connection performance on Tomcat 8? 【发布时间】:2018-09-16 17:30:36 【问题描述】:

我刚刚安装了一台新服务器(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 in 0.8s 新服务器:4.43M 276KB/s in 16s Dev Machine tcServer(基于 Tomcat8):4.43M 4.24MB/s in 1.0s 开发机器 Tomcat 8:4.43M 318KB/s in 14s

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

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

问候。


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

tcServer 版本信息:

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

tomcat 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

server.xml 中的连接器(两者相同,将它们简化为基础)

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

【问题讨论】:

分析您的 Java 应用程序。飞行记录器应该可以。 每一个的启动时间呢?在 catalina.out 中检查。看看糟糕的性能是否仅在消费服务时很有趣。 【参考方案1】:

检查默认值

Tomcattc Server 打包为不同的产品:

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

tc Server 是一个更全面、更适合生产的 Tomcat 兼容应用服务器。

请参阅此处查看more extensive comparison of the 2 servers。

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

参见 Tomcat's default properties 与 tc Server default ones (并且在由可用选项数量引起的眩晕消退之后)参见例如 tomcat 的最大数量为 200 tc server 使用 300 的线程。

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

【讨论】:

【参考方案2】:

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

完全一样的JRE(OpenJDK 1.8.0_162),War文件和server.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"

【讨论】:

以上是关于如何对 Tomcat 8 上的连接性能进行故障排除?的主要内容,如果未能解决你的问题,请参考以下文章

对无法连接到 MySQL 的 Spring Boot 应用程序进行故障排除

我可以使用 NVIDIA nsight 对 WPF 性能进行故障排除吗?

从 .net 2.0 转换到 4.0 后对性能问题进行故障排除

如何在 Windows 上对 PHPMailer/OpenSSL TLS SMTP 进行故障排除?

使用 Linux for Windows 子系统对 ssh“连接超时”进行故障排除

对卡在 CLOSE_WAIT 状态的连接进行故障排除