java - 适当的 Tomcat 5.5 启动参数来调整 JVM 以满足极高的需求、大堆 Web 应用程序?

标签 java tomcat jvm performance

我们最近将一个大型、高要求的 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 的基础我们的 Tomcat 4 安装了很长时间,现在可能弊大于利)。

一些注意事项:

  • 应用程序内存占用是 大约 1GB,可能略多一些。
  • CPU 不是问题 - 所有机器 服务应用程序(负载平衡)是 < 30% CPU
  • 机器上的物理内存有很多空间。
  • -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

最佳答案

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
顺便说一句,你试过 Tomcat 6 吗?与 Tomcat 5.5 相比,Tomcat 6 在 Java 6 上运行得更好。

P.S:我已经使用 Tomcat 有一段时间了,通常尝试让 sun 的 JDK 自由支配,几乎不做任何调整。

关于java - 适当的 Tomcat 5.5 启动参数来调整 JVM 以满足极高的需求、大堆 Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/202502/

相关文章:

java - java GC 是怎么回事? PermGen 空间快满了?

java - 应用程序子类的空指针异常

java - Java 项目的所有 RAM 使用都已耗尽

file - 无法使用Docker在tomcat上运行webapplication

java - 如何理解 Java 中的 "Happens-before consistency is not sufficient"

java - 非 Activity 状态下的 Spring Boot 堆使用情况

java - JUnit测试检查三角形是否是矩形

java - Android - 使用数组动态添加图像到列表

Java 和 XSLT : How to specify multiple input files to xslt in java?

java - 从 lib 目录加载 jar 文件的顺序