领先一步
VMware 提供培训和认证,助您加速前进。
了解更多几周前,Filip Hanik 和我举办了关于优化和调优 Apache Tomcat 系列网络研讨会的第二场。您可以在 SpringSource 网站的网络研讨会部分 获取研讨会的录音和幻灯片副本。同一页面还提供之前所有 SpringSource 网络研讨会以及 Covalent 网络研讨会存档 的链接。
在问答环节,我们未能解答所有问题,因此,正如承诺的那样,以下是剩余的问题和我们的回答。
您几乎肯定需要使用分析器来识别内存泄漏的根本原因。最新的 Sun JDK 包含了 jhat 和 jmap 等工具。还有许多其他免费和商业的分析器可用。Filip 和我在调查 Tomcat 内存泄漏时使用 YourKit,因为 YourKit 为开源开发者提供免费许可证。
这通常发生在由 Tomcat 加载的类保留了对由 Web 应用程序加载的类的引用时。当 Web 应用程序停止时,Tomcat 类加载器会继续保留对 Web 应用程序加载的类的引用。这个类保留了对 Web 应用程序类加载器的引用,而后者又保留了对其加载的所有类的引用。因此,Web 应用程序类加载器及其加载的所有类都不符合垃圾回收的条件。这导致了内存泄漏。典型的根本原因是 JDBC 驱动程序和日志框架。
要使用的 JVM 是通过 JAVA_HOME(完整 JDK)或 JRE_HOME(仅 JRE)环境变量设置的。设置位置取决于您的环境,特别是如果 Tomcat 配置为在系统启动时自动启动。如果您可以自由选择设置位置,那么根据您的操作系统使用 setenv.bat 或 setenv.sh。
不,我们不推荐。您选择哪个 JVM 供应商取决于您的操作系统。
我们推荐 mod_proxy_http,mod_jk 紧随其后。通常,mod_proxy_ajp 不如 mod_proxy_http 或 mod_jk 稳定。请注意,mod_jk2 已被弃用,不应再使用。
使用 SSL 时应启用 HTTP keep alive,因为 SSL 握手是每个请求都要执行的相对昂贵的操作。
是的,我们不建议。我们从客户那里收到的反馈是 APR 连接器在 Solaris 上不稳定。
在不知道您使用的具体 bug 或版本的情况下,很难评论。所有已知的 Apache httpd 问题及其当前状态都可以在 ASF Bugzilla 数据库 中找到。Tomcat 问题也可以在 Bugzilla 中找到。
对于高并发环境,将其设置为 1。否则,将其设置为页面上的平均对象数,介于 10 到 100 之间。
JkOptions +DisableReuse 应与您的其他 mod_jk 设置一起放在 httpd.conf 文件中。
当您需要支持高并发且开启 keep alive,并且 APR 不是一个选项时,例如因为它在您的平台上不稳定。
这取决于情况。如果您将所有请求都代理到 Tomcat,性能会略有下降。如果 httpd 处理部分请求(例如所有静态内容),那么您可能会看到一些好处。有一些基准测试试图证明某个连接器比另一个更好。然而,这些基准测试很可能无法代表您的应用程序。唯一确定的方法是在您的环境中,使用真实的负载和使用模式进行测试。
是的。这是否为您的环境提供最佳性能取决于您的环境和应用程序。与上一个问题一样,唯一确定方法是在您的环境中,使用真实的负载和使用模式进行测试。
您的安装的安全性取决于许多因素。使用或不使用 Apache httpd 不太可能显著改变您的安装安全性。其他因素,例如及时更新补丁和使用防火墙,通常对您的整体安全级别产生更大的影响。
和往常一样,这取决于您的环境,但 httpd 性能调优文档 提供了一些有用的通用指导。
SpringSource ERS 不仅仅是 Apache Tomcat。从纯 Tomcat 的角度来看,性能不是决定性因素。ERS 的优势在于安装简单、易于管理的升级和补丁、对多个实例的支持以及所有组件的集成。
会有很多差异,而重要的差异会因组织而异。首先弄清楚您期望从应用服务器获得什么,然后将该列表与市场上的产品进行比较。合并有很多好处。更高的一致性意味着更简单的维护、更少的培训等等。但是,也有成本。您需要审视您的组织以及它计划如何进行合并(仅新项目、下一主要版本的所有项目、立即合并所有项目等),以便比较成本与相关的益处。
在这方面已经发布了各种报告。结果的有用性取决于测试与您的负载匹配程度。和往常一样,唯一确定的方法是在您的环境中,使用真实的负载和使用模式进行测试。
Tomcat 没有提供此配置选项。当然,您可以创建多个 Tomcat 实例,在每个实例上安装您的应用程序,然后在实例之间进行负载均衡。
的 管理器状态页面 可能是一个很好的起点。如果需要,您可以使用该 Servlet 的代码作为自己更具体/更广泛检查的基础。如果您对其进行了增强,请考虑将您的增强贡献回 Apache Tomcat 社区。
默认位置是 $CATALINA_BASE/conf。