我们最近将一个大型、高需求的 Web 应用程序从 Tomcat 4 迁移到 Tomcat 5.5,并注意到一些似乎与 JVM 暂停有关的特殊减速行为。为了在 Tomcat 4 上运行我们的应用程序并支持随时间增加的负载,许多不那么标准的 JVM 参数被设置和调整如下,我希望有 Tomcat JVM 调整经验的人可以评论任何可能有害的事情到 Tomcat 5.5 安装。另请注意,其中一些可能是从以前版本的 Java 继承下来的(我们在 Java 1.6 上使用这些参数成功运行了 Tomcat 4 一段时间,但可能已经引入了一些来帮助 Java 1.4 上的垃圾收集,这是 Java 1.4 的基础。我们的 Tomcat 4 安装了很长时间,现在可能弊大于利)。
一些注意事项:
- 应用程序内存占用约为 1GB,可能略多一些。
- CPU 不是问题 - 为应用程序服务的所有机器(负载平衡)的 CPU < 30%
- 机器上的物理内存有很多空间。
- -XX:MaxPermSize=512m 是作为 5.5 升级的一部分添加的唯一参数,它是对内存不足 permgen 空间问题的反应(它已解决)。
- 在 Java 1.6、Solaris 操作系统上运行
-server -Xms1280m -Xmx1280m -XX:MaxPermSize=512m -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=75 -XX:MaxTenuringThreshold=0 -XX:+ AggressiveOpts -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -Dsun.io.useCanonCaches=false -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000