java - 部署在 Tomcat 上的应用程序的性能问题
问题描述
最近,我们将所有公司的应用程序从 Websphere 迁移到了 Tomcat 应用程序服务器。作为此过程的一部分,我们完成了性能测试。
我们发现一些应用程序在 Tomcat 中的性能下降超过 100%。我们增加了线程数,我们配置了数据源设置以适应我们的测试,我们还增加了 Tomcat 服务器中的读写缓冲区大小。
Application Background:
-> Spring Framework
-> Hibernate
-> Oracle 12c
-> JSPs
-> OpenJDK 8
我们已经检查了数据库,发现数据库中的性能没有问题。
运行测试时的 CPU 利用率始终低于10%
.
堆设置是-xms = 1.5G to -xmx = 2G
,它永远不会使用超过1.2G
.
我们还有两个节点和顶部的 HAProxy 来平衡负载。(我们没有网络服务器)。
尽管我们尽了最大的努力,但我们无法查明导致性能下降的问题。我知道这些信息不足以为我们的问题提供解决方案,但是,任何关于如何进行的建议都会非常有帮助,因为我们遇到了死胡同并且无法继续进行。
如果您可以分享任何有助于发现问题的观点,请不胜感激。
谢谢。
解决方案
您提到的问题有很多可能的原因,并且确实没有太多数据可供使用。不管怎样,正如kann
评论的那样,一个好的开始方法是收集java进程的线程转储。
我还会质疑您是否在同一台服务器上运行,或者它是否是新设置的服务器以及它们的外观(资源方面)。测试期间是否有任何 CPU/内存/IO 限制?
关于 Xmx,听起来您没有将-XX:+AlwaysPreTouch
标志传递给 JVM,但我建议您查看它,因为它会使 JVM 在启动时将堆内存归零,而不是在运行时执行(这可能意味着性能下降)。
推荐阅读
- jsp - 图像未显示在 JSP 中 - 仅限 AWS 环境
- java - 如何为 Fragment 上的 FloatingActionButton 实现 onClickListener
- nuget-package - Nuget 包 readme.txt 未更新
- javascript - 标记弹出图表js
- typescript - onClick 后未调用 useLazyQuery
- python - 为什么我的函数对于特定值这么慢?
- python - Python Json 期望值
- javascript - 如何从我的服务返回我的 CSV 数据 - 异步/等待问题?
- python - 来自字典列表的字典的数据框?
- c# - Azure Blob 文件访问和属性 - 无法设置属性