一尘不染

适当的Tomcat 5.5启动参数来调整JVM,以实现极高需求的大型堆Web应用程序?

tomcat

我们最近将一个大型的,高需求的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升级过程中添加的唯一参数,并且对内存不足的磁导空间问题(已解决)有反应。
  • 在Java 1.6,Solaris OS上运行

-服务器-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


阅读 190

收藏
2020-06-16

共1个答案

一尘不染

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免费统治。

2020-06-16