Mark Thomas

校友
博客文章作者Mark Thomas

优化和调整 Apache Tomcat - 第 2 部分

工程 | 2008年10月14日 | ...

几周前,Filip Hanik 和我一起举办了关于优化和调整 Apache Tomcat 的系列网络研讨会的第二部分。网络研讨会的录音和幻灯片的副本可以从SpringSource 网站的网络研讨会部分获取。同一页面包含所有以前的 SpringSource 网络研讨会的链接,以及Covalent 网络研讨会存档

我们在问答环节中未能解答所有问题,因此,正如承诺的那样,以下是其余问题和我们的答案。

  • 如何在 Tomcat 应用程序中识别内存泄漏?

    您几乎肯定需要使用分析器来识别内存泄漏的根本原因。最新的 Sun JDK 包括诸如 jhat 和 jmap 之类的工具。还有许多其他分析器可用,既有免费的,也有商业的。Filip 和我使用YourKit来调查 Tomcat 内存泄漏,因为 YourKit 为开源开发者提供免费许可证。

  • 重新部署如何导致内存泄漏?

    这通常发生在 Tomcat 加载的类保留对 Web 应用程序加载的类的引用时。当 Web 应用程序停止时,Tomcat 类加载器继续保留对 Web 应用程序加载的类的引用。此类保留对 Web 应用程序类加载器的引用,而类加载器又保留对其加载的所有类的引用。因此,Web 应用程序类加载器及其加载的所有类都不符合垃圾回收的条件。这会导致内存泄漏。其典型根本原因是 JDBC 驱动程序和日志记录框架。

  • 更改 Tomcat 使用的 JVM 的最佳方法是什么?

    要使用的 JVM 使用 JAVA_HOME(完整 JDK)或 JRE_HOME(仅 JRE)环境变量设置。设置此变量的正确位置将取决于您的环境,特别是如果 Tomcat 配置为在系统启动时自动启动。如果您可以在任何位置自由选择设置此变量,请根据您的操作系统使用 setenv.bat 或 setenv.sh。

  • 您推荐特定的 JVM 吗?

    不,我们不推荐。您选择的 JVM 供应商取决于您的操作系统。

  • 我应该使用哪个连接器将 Apache httpd 连接到 Tomcat?

    我们推荐 mod_proxy_http,mod_jk 位居第二。通常,mod_proxy_ajp 比 mod_proxy_http 或 mod_jk 不稳定。请注意,mod_jk2 已弃用,不应再使用。

  • 使用 SSL 时 maxKeepAliveRequests 的正确设置是什么?

    使用 SSL 时,应启用 HTTP 保持活动,因为 SSL 握手对于每个请求来说都是一项相对昂贵的操作。

  • 如果我们在 Solaris 上运行 Tomcat,您是否建议不要使用本机 APR 连接器?

    是的,我们建议不要使用。我们从客户那里收到的反馈是,APR 连接器在 Solaris 上不稳定。

  • 我们之前尝试迁移到 Solaris 上的 mod_proxy_http,但遇到了一些错误。这些错误是否已解决?

    在我们不知道您使用的确切错误或版本的情况下,很难发表评论。所有已知的 Apache httpd 问题和当前状态都可以在ASF Bugzilla 数据库中找到。Tomcat 问题也可以在 Bugzilla 中找到。

  • 对于默认阻塞式 IO HTTP 连接器,我应该使用什么 maxKeepAliveRequests 值?

    对于高并发环境,将其设置为 1。否则,将其设置为页面上对象平均数量,介于 10 到 100 之间。

  • 如何配置 JkOptions +DisableReuse?

    JkOptions +DisableReuse 应与其他 mod_jk 设置一起放在您的 httpd.conf 文件中。

  • 何时最好使用非阻塞式 IO HTTP 连接器?

    当您需要支持具有保持活动功能的高并发,而 APR 不是一个选项时,例如因为它在您的平台上不稳定。

  • 如果我在 Apache Tomcat 前面使用 Apache httpd,我会看到更好的性能吗?

    这取决于具体情况。如果您将所有请求代理到 Tomcat,则性能会略微下降。如果 httpd 处理一些请求(例如所有静态内容),那么您可能会看到一些好处。有一些基准测试试图证明一个连接器比另一个连接器更好。但是,这些基准测试不太可能代表您的应用程序。唯一确定方法是在您的环境中使用实际负载和使用模式进行测试。

  • 可以在没有 Web 服务器的情况下在生产环境中使用 Tomcat 吗?

    可以。这是否为您的环境提供最佳性能将取决于该环境和您的应用程序。与上一个问题一样,唯一确定方法是在您的环境中使用实际负载和使用模式进行测试。

  • 在 Tomcat 前面使用 Apache httpd 会提高安全性吗?

    安装的安全性将取决于许多因素。是否使用 Apache httpd 不太可能显着改变安装的安全性。其他因素(例如及时更新补丁和使用防火墙)通常对您的整体安全级别有更大的影响。

  • 哪个 Apache httpd MPM 提供最佳性能?

    与往常一样,这取决于您的环境,但是httpd 性能调整文档提供了一些有用的通用指导。

  • SpringSource ERS 和 Apache Tomcat 之间的性能差异是什么?

    SpringSource ERS 不仅仅是 Apache Tomcat。从纯 Tomcat 的角度来看,性能并不是区别因素。ERS 的好处是简单的安装、易于管理的升级和修补、对多个实例的支持以及所有组件的集成。

  • 我的公司使用 Tomcat 和 XYZ 应用服务器。Tomcat 与 XYZ 应用服务器相比如何?整合有什么好处?

    会有很多差异,重要的差异会因组织而异。首先确定您想要从应用服务器中获得什么,然后将该列表与市场进行比较。整合有很多好处。更大的一致性意味着更简单的维护、更少的培训等等。但是,也有一些成本。您需要查看您的组织以及它如何计划整合(仅限新项目、下一个主要版本的全部项目、现在的一切等等),以将成本与相关效益进行比较。

  • 您是否有关于 Tomcat 和 XYZ 应用服务器的性能比较数据?

    在这一领域已经发布了各种报告。结果是否有用取决于测试与您的负载匹配程度如何。与往常一样,唯一确定方法是在您的环境中使用实际负载和使用模式进行测试。

  • 负载测试 Tomcat 服务器的好方法是什么?

    有几种可用的工具可以驱动负载,既有免费的,也有商业的。免费工具包括abJMeter

  • 为了实现高可用性和高性能,可以将 Tomcat 配置为为同一 Web 应用程序启动多个 JVM 吗?

    Tomcat 没有将其作为配置选项提供。当然,您可以创建多个 Tomcat 实例,在每个实例上安装您的应用程序,然后跨实例进行负载平衡。

  • 是否有用于 Tomcat 的通用健康检查脚本?

    管理器状态页面可能是开始的好地方。如果需要,您可以使用该 Servlet 的代码作为您自己更具体/更广泛的检查的基础。如果您确实对其进行了增强,请考虑将您的增强功能贡献回 Apache Tomcat 社区。

  • logging.properties 文件位于哪里?

    默认位置位于 $CATALINA_BASE/conf。

优化和调整 Apache Tomcat

工程 | 2008年8月8日 | ...

星期三,我举办了一个关于优化和调整 Apache Tomcat 的网络研讨会。网络研讨会的录音和幻灯片的副本可以从SpringSource 网站的网络研讨会部分获取。同一页面包含所有以前的 SpringSource 网络研讨会的链接,以及Covalent 网络研讨会存档

我在问答环节中未能解答所有问题,因此,正如承诺的那样,以下是其余问题和我的答案。

  • 在 Apache Tomcat 上运行的 XYZ 应用程序的最佳调整实践是什么?

    任何应用程序都没有理想的配置设置,因为最佳设置将取决于许多因素。首先,使用应用程序提供的建议。之后,按照网络研讨会中列出的流程进行操作,如果这样做可以提高性能,不要害怕违反应用程序提供的建议。

  • <li><strong>Do you have any recommendations for open source tools for troubleshooting, performance benchmarking or testing web applications?</strong>
    

    我的故障排除起点是使用Eclipse构建一个简单的测试用例。然后,我使用内置的调试器单步执行代码,以真正了解发生了什么。如果您需要分析器,则NetBeans包含一个,尽管我从未使用过它。我使用商业分析器(YourKit),因为他们向开源开发者提供免费许可证。对于性能基准测试,我使用Apache JMeter,对于测试,我结合使用JUnitApache JMeter

    <li…

领先一步

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部