Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署在Tomcat上的应用程序的性能问题_Java_Performance_Tomcat - Fatal编程技术网

Java 部署在Tomcat上的应用程序的性能问题

Java 部署在Tomcat上的应用程序的性能问题,java,performance,tomcat,Java,Performance,Tomcat,最近,我们已经将所有公司的应用程序从Websphere迁移到Tomcat应用服务器。作为这个过程的一部分,我们进行了性能测试 我们发现Tomcat中有两个应用程序的性能下降超过100%。我们增加了线程的数量,我们配置了数据源设置以适应我们的测试,我们还增加了Tomcat服务器中的读写缓冲区大小 Application Background: -> Spring Framework -> Hibernate -> Oracle 12c -> JSPs

最近,我们已经将所有公司的应用程序从Websphere迁移到Tomcat应用服务器。作为这个过程的一部分,我们进行了性能测试

我们发现Tomcat中有两个应用程序的性能下降超过100%。我们增加了线程的数量,我们配置了数据源设置以适应我们的测试,我们还增加了Tomcat服务器中的读写缓冲区大小

Application Background:

-> Spring Framework   
-> Hibernate   
-> Oracle 12c   
-> JSPs   
-> OpenJDK 8
我们已经检查了数据库,没有发现数据库中的性能问题。
运行测试时的CPU利用率始终小于
10%

堆设置是
-xms=1.5G到-xmx=2G
,并且它使用的资源永远不会超过
1.2G

我们还有两个节点,顶部有HAProxy来平衡负载。(我们没有安装web服务器)

尽管我们尽了最大的努力,但仍无法确定导致性能下降的问题。我知道这些信息不足以为我们的问题提供解决方案,但是,任何关于如何继续的建议都将非常有用,因为我们遇到了死胡同,无法继续

如果您能分享任何有助于发现问题的观点,我们将不胜感激


谢谢。

进行线程转储,分析应用程序的哪个部分有问题,并从那里开始故障排除


按照本文的内容详细解释线程转储分析-

获取线程转储,分析应用程序的哪个部分存在问题,并从那里开始故障排除


按照本文的内容详细解释线程转储分析-

您提到的问题有很多可能的原因,实际上没有太多数据可供处理。不管怎样,正如kann所评论的,一个好的开始方法是收集java进程的线程转储

我还想问一下,您是在同一台服务器上运行,还是在新安装的服务器上运行,以及它们的外观(从资源角度看)。测试期间是否存在CPU/内存/IO限制


关于Xmx,听起来您没有将
-XX:+AlwaysPreTouch
标志传递给JVM,但我建议您研究一下,因为它会使JVM在启动时将堆内存归零,而不是在运行时执行(这可能意味着性能受到影响).

您提到的问题有很多可能的原因,但实际上没有太多数据可供处理。不管怎样,正如kann所评论的,一个好的开始方法是收集java进程的线程转储

我还想问一下,您是在同一台服务器上运行,还是在新安装的服务器上运行,以及它们的外观(从资源角度看)。测试期间是否存在CPU/内存/IO限制

关于Xmx,听起来您没有将
-XX:+AlwaysPreTouch
标志传递给JVM,但我建议您研究一下,因为它会使JVM在启动时将堆内存归零,而不是在运行时执行(这可能意味着性能受到影响)