我们最近将一个大型的,高需求的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安装了很长时间,现在可能弊大于利)。
一些注意事项:
-服务器-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
Java冠军之一,Kirk Pepperdine的博客:http : //kirk.blog- city.com/how_to_cripple_gc_ergonomics.htm。 引用1“ GC文档将告诉您设置会影响什么,但通常不会告诉您设置的结果。最大的线索是您错误地选择了分支,是您显式设置了值然后提示GC另一个线索是,如果您没有合理的理由来调整设置,并且仅仅因为某些所谓的专家说此设置最有效就是噪音,而不是声音,并且从根本上说也不是原因。”
引用2:“正如我在以前的博客文章中所述,除非您有充分的理由,否则请勿触摸旋钮。如果必须触摸旋钮,请仅使用有助于人体工程学的旋钮(而不是那些有助于人体工程学的旋钮)轻松进行操作。从而降低了符合人体工程学的功能,从而满足了您的暂停时间和吞吐量目标。”
因此,我建议您回到普通 服务器-Xms1280m -Xmx1280m -XX:MaxPermSize = 512m -XX:+ UseConcMarkSweepGC -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:-TraceClassUnloading -Dsun.io.useCanonCaches = false -Dsun.net.client.defaultConnectTimeout = 60000 -Dsun.net.client.defaultReadTimeout = 60000
查找是否可以提供更好的性能。如果是, 顺便说一句,-XX:MaxPermSize = 378m是否有任何问题? Java 1.6的人机工程学比1.4好得多。您可能希望将其调整为小于1.4 BTW,您是否尝试过Tomcat 6?Tomcat 6在Java 6上的运行要好于Tomcat 5.5。
PS:我已经使用Tomcat一段时间了,通常会尝试在不加调整的情况下让sun的JDK免费统治。