Java 服务器应用程序最简单的JVM GC参数集是什么?

Java 服务器应用程序最简单的JVM GC参数集是什么?,java,performance,garbage-collection,Java,Performance,Garbage Collection,最常用的GC参数集是什么?我想我应该与大家分享一些我过去调试过的服务器应用程序的设置。在撰写本文时,Sun/Oracle JDK 6已经提供了这些功能 这可能是最常用的一组GC参数。当然,设置在很大程度上取决于应用程序的性质—对象生命周期、分配率、引用/指针的复杂性等。如果您的体验有任何不同,请与他人分享 基本设置。最小和最大堆是相同的。假定为64位计算机。大于4-6g的堆需要仔细调整和测试。6g不是强制性的 -服务器-Xms6g-Xmx6g-XX:MaxPermSize=256m 选项A并行收

最常用的GC参数集是什么?

我想我应该与大家分享一些我过去调试过的服务器应用程序的设置。在撰写本文时,Sun/Oracle JDK 6已经提供了这些功能

这可能是最常用的一组GC参数。当然,设置在很大程度上取决于应用程序的性质—对象生命周期、分配率、引用/指针的复杂性等。如果您的体验有任何不同,请与他人分享

基本设置。最小和最大堆是相同的。假定为64位计算机。大于4-6g的堆需要仔细调整和测试。6g不是强制性的 -服务器-Xms6g-Xmx6g-XX:MaxPermSize=256m

选项A并行收集器:高吞吐量、面向批处理的工作。明显的周期性停顿。 -XX:+UseParallelGC

选项B CMS:低吞吐量、低延迟、连续处理。频繁的不明显的微停顿,罕见的长停顿。 -XX:+UseParNewGC-XX:+ParallelRefProcEnabled-XX:+useConMarkSweepGC-XX:MaxGCPauseMillis=250-XX:+CMSIncrementalMode-XX:+CMSIncrementalPacing-XX:+CMSParallelRemarkEnabled

UAT/SAT/预生产期间的额外监控。使用或查看此日志。 -verbose:gc-Xloggc:my_gc_output.hprof-XX:+printgtimestamps-XX:+printgcmetails


干杯

上面提到的问题太模糊了,无法理智地回答。这取决于您的工作量、需求和目标


一般来说,我会从-Xmx开始,您需要的ram量g和-XX:UseCompressedOops。除此之外,制作一个测试用例。每次进行一次更改,并测量其对您自己工作负载的影响。

问题确实很模糊,因为没有一套适合所有/大多数应用程序的设置。顺便说一句,除非我弄错了,jdk6以后的JVM自身的调优能力也有限。您可以采取以下步骤:

第一步。如果您知道您的应用程序将需要比默认值更多的值,请输入一些Xmx和MaxPermSize。 第二步。运行app并观看jstat。如果GC模式不符合要求,则转至步骤3 第三步。根据观察结果一次调整一个设置。 第四步。重复-转至步骤2:-

这是我看到调优工作的唯一方式。如果您使用的是Weblogic、Websphere之类的产品,提供商可能会建议您从一些基本设置开始,但一般来说,您希望从默认设置开始


致以最诚挚的问候

我不确定这个问题是否真的与主题有关。不管是哪种方式,你都应该把下面的内容都贴出来,作为你问题的答案。你可以回答你自己的问题!由于init mark阶段的单线程性质,以及icms模式下清除之间的调度方式,因此不建议在任何超过1个内核的现代系统上使用icms。此外,您应该始终打开这些日志,而不仅仅是在测试中,而且6g堆的一揽子声明是毫无意义的,例如compressedoopsI的影响做出了错误的陈述并将其删除。为了跟进@JonBright的评论,您需要在这里将行上的位重新表述为一个客观问题,例如运行服务器应用程序时Sun的JVM有哪些好的垃圾收集设置?然后将行下的位作为答案发布。然后等待两天,看看是否有人能改进你的答案,并接受最好的答案,不管是不是你的。不建议使用iCMS,尤其是因为大多数服务器都有多个核心/线程。