首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适当的Tomcat5.5启动参数来调优JVM,以适应非常高的需求,大型堆web应用程序?

适当的Tomcat5.5启动参数来调优JVM,以适应非常高的需求,大型堆web应用程序?
EN

Stack Overflow用户
提问于 2008-10-14 19:30:24
回答 4查看 22.8K关注 0票数 11

我们最近从Tomcat 4向Tomcat 5.5迁移了一个大的、高需求的web应用程序,并注意到了一些与JVM暂停有关的特殊的减速行为。为了在Tomcat 4上运行我们的应用程序并支持随着时间的推移而增加的负载,按照下面的步骤设置和调优了许多不太标准的JVM参数,我希望有Tomcat JVM调优经验的人能够评论任何可能对Tomcat 5.5安装有害的东西。还要注意的是,其中一些可能是继承以前版本的Java (我们在Java1.6上成功地运行了Tomcat 4,使用这些参数成功地运行了一段时间,但有些参数可能是为了帮助Java 1.4上的垃圾收集,Java 1.4是我们Tomcat 4长期安装的基础,现在可能弊大于利)。

一些注意事项:

machines.

  • -XX:MaxPermSize=512m的
  • 应用程序内存占用约1GB,可能略高于1GB。
  • CPU不是一个问题--所有为应用程序提供服务(负载平衡)的机器都是< 30%的CPU
  • --在上物理内存上的大量空间空间是作为5.5升级的一部分而添加的唯一参数,并且对外部内存permgen空间问题(它在Java1.6上是solved).
    • Running、Solaris OS

    )作出了反应。

-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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-14 20:14:03

Java冠军之一,Kirk的博客:http://kirk.blog-city.com/how_to_cripple_gc_ergonomics.htm

引用1:"GC文档会告诉你设置会产生什么影响,但通常不知道会产生什么效果。当你显式地设置一个值,然后给GC人类工效学一个提示时,才是你走错岔路口的最大线索。另一个线索是,如果你没有合理的理由来调整设置,那么仅仅是因为一些所谓的专家说这个设置最好不过是噪音,而不是声音,而且完全不是原因。“

引用2:“正如我在博客上说过的,除非你有很好的理由,否则不要碰旋钮。如果你必须触摸旋钮,只使用那些帮助人体工程学的旋钮,而不使用那些削弱人体工程学能力的旋钮来满足你的暂停时间和吞吐量目标。”

所以,我建议你回到平原

-server -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有什么问题吗?

Java1.6比1.4具有更好的人机工程学。你可能想把它调到1.4以下

顺便问一下,你试过Tomcat 6了吗?Tomcat 6比Tomcat 5.5在Java 6上运行得更好。

P.S :我使用Tomcat已经有一段时间了,并且通常尝试让sun的JDK自由运行,几乎没有任何调整。

票数 7
EN

Stack Overflow用户

发布于 2008-10-14 19:54:06

作为一个也在处理这件事的人,我当然没有任何明确的答案,特别是考虑到应用程序的特殊性,这类事情是怎样的。一个很好的参考,你可能已经看到,在这里:

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

但是,这是一个相当长的jvm参数列表,这表明可能存在不必要的参数集,特别是考虑到您有几个调试选项(PrintGCDetails、PrintGCTimeStamps、TraceClassUnloading),这些选项在生产应用程序上不太好。第二次超时也可能会消耗资源。"server“是默认的,但不会造成任何损害。

应用程序如何使用最小的调优参数(jvm大小,MaxPermSize)运行?

票数 3
EN

Stack Overflow用户

发布于 2008-10-15 13:47:00

您可能还想看看如何更改Tomcat用于处理conf/server.xml中请求的最小/最大线程数。

代码语言:javascript
复制
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" ...

我在以前的工作中听到的一个经验法则是,maxThreads应该等于您希望处理的同时连接的数量。我不知道这个说法有多科学,尽管我认为这是有意义的,因为您不希望客户端被阻塞,等待线程释放来处理他们的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/202502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档