Add -XX:ParallelOldGC with latest JIRA distribution and investigate use case for -XX:UseConcMarkSweepGC

XMLWordPrintable

      NOTE: This suggestion is for JIRA Server. Using JIRA Cloud? See the corresponding suggestion.

      By default, JIRA is shipped with the following command line "JAVA_OPTS" environment variables:

      JAVA_OPTS="-Xms128m -Xmx256m $JAVA_OPTS -Djava.awt.headless=true -Datlassian.standalone=JIRA -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true "

      The overwhelming majority of our customers use a Sun JRE, of that about 60% with Java 6, and the remainder mainly with Java 5. By default, JIRA uses the parallel collector.

      An extract from Sun's java 6 garbage collection documents"

      The parallel collector (also known as the throughput collector) performs minor collections in parallel, which can significantly reduce garbage collection overhead. It is intended for applications with medium- to large-sized data sets that are run on multiprocessor or multi-threaded hardware. The parallel collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseParallelGC.

      New: parallel compaction is a feature introduced in J2SE 5.0 update 6 and enhanced in Java SE 6 that allows the parallel collector to perform major collections in parallel. Without parallel compaction, major collections are performed using a single thread, which can significantly limit scalability. Parallel compaction is enabled by adding the option -XX:+UseParallelOldGC to the command line.

      Sun defines a server-class machine as one with at least 2 processors and 2 gigabytes of memory. By default in JIRA, The parallel Collector is chosen, which collects the (smaller) eden heap in parallel, but the main, much larger (on-going) Tenured heap as a single thread, in serial. This typically takes anywhere from 1-2 seconds. Given the large number of high-use, high-issue installations in the wild, some with performance issues, and that most installations would exist on at the least dual core machines, I strongly recommend the distribution include at least the +UseParallelOldGC parameter, that is the Parallel Compactor, or, after some investigation, the -XX:+CMSIncrementalMode flag.

      I strongly suspect there will be significant GC pressure on many existing JIRAs with high loads, given at each Full GC event JIRA must pause and scour the heap in serial; meanwhile requests continue to queue. Many customers are not aware of this flag. if we parallize this we give the larger JIRAs more breathing space, especially at periods of high load (ie. The Busy Hour).

            Assignee:
            Unassigned
            Reporter:
            Peter White [Atlassian]
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: