【问题标题】:Running tomcat with -server JVM option使用 -server JVM 选项运行 tomcat
【发布时间】:2011-04-13 04:40:26
【问题描述】:
【问题讨论】:
标签:
java
performance
tomcat
jvm
【解决方案1】:
JVM 很可能已经在服务器模式下运行。对于 Linux 上的 JDK 5/6,JVM 将在服务器级机器上默认为服务器模式:
“[...] 服务器级机器的定义是一台至少有 2 个 CPU 和至少 2GB 物理内存的机器。”
这已记录在 here(对于 Java 6,here)。
没有详细说明 FreeBsd 上发生了什么,但我希望 FreeBsd JVM 是仅服务器模式,或者它们在服务器级机器上默认为服务器模式,就像 Linux 一样。
【解决方案2】:
诀窍在于现代 JVM 可以“自动检测”类似服务器的机器。因此,如果您不指定 -server 或 -client,JVM1.5+ 将选择最佳方法 - 即使您不使用该属性,它也可能会在服务器模式下运行。
在这种情况下,如果使用 -client 选项启动 JVM,您可能会注意到不同之处。
参考
【解决方案3】:
服务器模式的第一个区别是开启了Parallel GC,它是一个吞吐量垃圾收集器,推荐用于多核机器。一般来说,它会缩短垃圾收集的延迟时间。
其次,服务器模式将在 JIT 中使用更积极的优化。
我认为服务器模式是生产机器上必须具备的。
我建议您切换到 1.6 JVM,因为它具有更好的 gc 实现和更好的优化。
【解决方案4】:
OTN website 讨论了差异。我们很少在任何生产系统中使用默认参数(GC 收集算法、堆大小等),因此它不会提供太大的提升。
在实现此参数后,您无需注意任何具体的事情,但如果您发现 -server 和 -client 之间存在差异,则 JIT 编译器始终是一个不错的起点。
【解决方案5】:
由于垃圾收集和其他参数的不同,您会注意到长期的差异。