Revert 7486, make CMS default GC, move gc opts to conf/jvm.options Patch by pmotta; reviewed by jmckenzie for CASSANDRA-10403
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1415fa51 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1415fa51 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1415fa51 Branch: refs/heads/trunk Commit: 1415fa512a21b933f89f8ff25b3fd12cfbbbf4cb Parents: ebb2b1b Author: Paulo Motta <pauloricard...@gmail.com> Authored: Wed Oct 14 14:36:52 2015 -0400 Committer: Joshua McKenzie <jmcken...@apache.org> Committed: Wed Oct 14 14:36:52 2015 -0400 ---------------------------------------------------------------------- CHANGES.txt | 2 + NEWS.txt | 2 +- conf/cassandra-env.ps1 | 122 ++++++++++++++++++++++++-------------- conf/cassandra-env.sh | 134 ++++++++++++++++++++++++++++-------------- conf/jvm.options | 105 +++++++++++++++++++++++++++++++++ debian/cassandra.install | 1 + debian/init | 1 + 7 files changed, 280 insertions(+), 87 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 54b505a..66e34b6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,6 @@ 3.0-rc2 + * Revert CASSANDRA-7486, make CMS default GC, move GC config to + conf/jvm.options (CASSANDRA-10403) * Fix TeeingAppender causing some logs to be truncated/empty (CASSANDRA-10447) * Allow EACH_QUORUM for reads (CASSANDRA-9602) * Fix potential ClassCastException while upgrading (CASSANDRA-10468) http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/NEWS.txt ---------------------------------------------------------------------- diff --git a/NEWS.txt b/NEWS.txt index 1176dcd..9ff43a2 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -54,7 +54,7 @@ Upgrading - Max mutation size is now configurable via max_mutation_size_in_kb setting in cassandra.yaml; the default is half the size commitlog_segment_size_in_mb * 1024. - 3.0 requires Java 8u40 or later. - - The default JVM GC has been changed to G1GC. + - Garbage collection options were moved from cassandra-env to jvm.options file. - New transaction log files have been introduced to replace the compactions_in_progress system table, temporary file markers (tmp and tmplink) and sstable ancerstors. Therefore, compaction metadata no longer contains ancestors. Transaction log files http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/conf/cassandra-env.ps1 ---------------------------------------------------------------------- diff --git a/conf/cassandra-env.ps1 b/conf/cassandra-env.ps1 index 7a4a61e..3c9d815 100644 --- a/conf/cassandra-env.ps1 +++ b/conf/cassandra-env.ps1 @@ -128,16 +128,18 @@ Function CalculateHeapSizes } # Validate that we need to run this function and that our config is good - if ($env:MAX_HEAP_SIZE) + if (($env:MAX_HEAP_SIZE -and !$env:HEAP_NEWSIZE) -or (!$env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE)) { - return + echo "Please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs. Aborting startup." + exit 1 } $memObject = Get-WMIObject -class win32_physicalmemory if ($memObject -eq $null) { - echo "WARNING! Could not determine system memory. Defaulting to 2G heap. Manually override in conf\cassandra-env.ps1 for different heap values." + echo "WARNING! Could not determine system memory. Defaulting to 2G heap, 512M newgen. Manually override in conf\jvm.options for different heap values." $env:MAX_HEAP_SIZE = "2048M" + $env:HEAP_NEWSIZE = "512M" return } @@ -174,6 +176,20 @@ Function CalculateHeapSizes $maxHeapMB = $quarterMem } $env:MAX_HEAP_SIZE = [System.Convert]::ToString($maxHeapMB) + "M" + + # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 + $maxYGPerCore = 100 + $maxYGTotal = $maxYGPerCore * $systemCores + $desiredYG = [Math]::Truncate($maxHeapMB / 4) + + if ($desiredYG -gt $maxYGTotal) + { + $env:HEAP_NEWSIZE = [System.Convert]::ToString($maxYGTotal) + "M" + } + else + { + $env:HEAP_NEWSIZE = [System.Convert]::ToString($desiredYG) + "M" + } } #----------------------------------------------------------------------------- @@ -294,12 +310,71 @@ Function SetCassandraEnvironment # Override these to set the amount of memory to allocate to the JVM at # start-up. For production use you may wish to adjust this for your # environment. MAX_HEAP_SIZE is the total amount of memory dedicated - # to the Java heap. + # to the Java heap. HEAP_NEWSIZE refers to the size of the young + # generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set + # or not (if you set one, set the other). + # + # The main trade-off for the young generation is that the larger it + # is, the longer GC pause times will be. The shorter it is, the more + # expensive GC will be (usually). + # + # The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent + # times. If in doubt, and if you do not particularly want to tweak, go + # 100 MB per physical CPU core. #$env:MAX_HEAP_SIZE="4096M" + #$env:HEAP_NEWSIZE="800M" CalculateHeapSizes ParseJVMInfo + + # Read user-defined JVM options from jvm.options file + $content = Get-Content "$env:CASSANDRA_CONF\jvm.options" + for ($i = 0; $i -lt $content.Count; $i++) + { + $line = $content[$i] + if ($line.StartsWith("-")) + { + $env:JVM_OPTS = "$env:JVM_OPTS $line" + } + } + + $defined_xmn = $env:JVM_OPTS -like '*Xmn*' + $defined_xmx = $env:JVM_OPTS -like '*Xmx*' + $defined_xms = $env:JVM_OPTS -like '*Xms*' + $using_cms = $env:JVM_OPTS -like '*UseConcMarkSweepGC*' + + # We only set -Xms and -Xmx if they were not defined on jvm.options file + # If defined, both Xmx and Xms should be defined together. + if (($defined_xmx -eq $false) -and ($defined_xms -eq $false)) + { + $env:JVM_OPTS="$env:JVM_OPTS -Xms$env:MAX_HEAP_SIZE" + $env:JVM_OPTS="$env:JVM_OPTS -Xmx$env:MAX_HEAP_SIZE" + } + elseif (($defined_xmx -eq $false) -or ($defined_xms -eq $false)) + { + echo "Please set or unset -Xmx and -Xms flags in pairs on jvm.options file." + exit + } + + # We only set -Xmn flag if it was not defined in jvm.options file + # and if the CMS GC is being used + # If defined, both Xmn and Xmx should be defined together. + if (($defined_xmn -eq $true) -and ($defined_xmx -eq $false)) + { + echo "Please set or unset -Xmx and -Xmn flags in pairs on jvm.options file." + exit + } + elseif (($defined_xmn -eq $false) -and ($using_cms -eq $true)) + { + $env:JVM_OPTS="$env:JVM_OPTS -Xmn$env:HEAP_NEWSIZE" + } + + if (($env:JVM_ARCH -eq "64-Bit") -and ($using_cms -eq $true)) + { + $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCondCardMark" + } + # Add sigar env - see Cassandra-7838 $env:JVM_OPTS = "$env:JVM_OPTS -Djava.library.path=""$env:CASSANDRA_HOME\lib\sigar-bin""" @@ -355,10 +430,6 @@ Function SetCassandraEnvironment # see http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workar $env:JVM_OPTS="$env:JVM_OPTS -XX:ThreadPriorityPolicy=42" - # min and max heap sizes should be set to the same value to avoid - # stop-the-world GC pauses during resize. - $env:JVM_OPTS="$env:JVM_OPTS -Xms$env:MAX_HEAP_SIZE" - $env:JVM_OPTS="$env:JVM_OPTS -Xmx$env:MAX_HEAP_SIZE" $env:JVM_OPTS="$env:JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" # Per-thread stack size. @@ -367,28 +438,6 @@ Function SetCassandraEnvironment # Larger interned string table, for gossip's benefit (CASSANDRA-6410) $env:JVM_OPTS="$env:JVM_OPTS -XX:StringTableSize=1000003" - # GC tuning options - # Use the Hotspot garbage-first collector. - $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseG1GC" - - # Have the JVM do less remembered set work during STW, instead - # preferring concurrent GC. Reduces p99.9 latency. - $env:JVM_OPTS="$env:JVM_OPTS -XX:G1RSetUpdatingPauseTimePercent=5" - - # The JVM maximum is 8 PGC threads and 1/4 of that for ConcGC. - # Machines with > 10 cores may need additional threads. Increase to <= full cores. - #$env:JVM_OPTS="$env:JVM_OPTS -XX:ParallelGCThreads=16" - #$env:JVM_OPTS="$env:JVM_OPTS -XX:ConcGCThreads=16" - - # Main G1GC tunable: lowering the pause target will lower throughput and vise versa. - # 200ms is the JVM default and lowest viable setting - # 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. - $env:JVM_OPTS="$env:JVM_OPTS -XX:MaxGCPauseMillis=500" - - # Save CPU time on large (>= 16GB) heaps by delaying region scanning - # until the heap is 70% full. The default in Hotspot 8u40 is 40%. - #$env:JVM_OPTS="$env:JVM_OPTS -XX:InitiatingHeapOccupancyPercent=70" - # Make sure all memory is faulted and zeroed on startup. # This helps prevent soft faults in containers and makes # transparent hugepage allocation more effective. @@ -404,19 +453,6 @@ Function SetCassandraEnvironment # http://www.evanjones.ca/jvm-mmap-pause.html $env:JVM_OPTS="$env:JVM_OPTS -XX:+PerfDisableSharedMem" - # GC logging options -- uncomment to enable - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDetails" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCDateStamps" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintHeapAtGC" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintTenuringDistribution" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintGCApplicationStoppedTime" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+PrintPromotionFailure" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:PrintFLSStatistics=1" - # $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:$env:CASSANDRA_HOME/logs/gc.log" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseGCLogFileRotation" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:NumberOfGCLogFiles=10" - # $env:JVM_OPTS="$env:JVM_OPTS -XX:GCLogFileSize=10M" - # Configure the following for JEMallocAllocator and if jemalloc is not available in the system # library path. # set LD_LIBRARY_PATH=<JEMALLOC_HOME>/lib/ http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/conf/cassandra-env.sh ---------------------------------------------------------------------- diff --git a/conf/cassandra-env.sh b/conf/cassandra-env.sh index 0a5bada..1d72070 100644 --- a/conf/cassandra-env.sh +++ b/conf/cassandra-env.sh @@ -71,6 +71,19 @@ calculate_heap_sizes() max_heap_size_in_mb="$quarter_system_memory_in_mb" fi MAX_HEAP_SIZE="${max_heap_size_in_mb}M" + + # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap size) + max_sensible_yg_per_core_in_mb="100" + max_sensible_yg_in_mb=`expr $max_sensible_yg_per_core_in_mb "*" $system_cpu_cores` + + desired_yg_in_mb=`expr $max_heap_size_in_mb / 4` + + if [ "$desired_yg_in_mb" -gt "$max_sensible_yg_in_mb" ] + then + HEAP_NEWSIZE="${max_sensible_yg_in_mb}M" + else + HEAP_NEWSIZE="${desired_yg_in_mb}M" + fi } # Determine the sort of JVM we'll be running on. @@ -89,19 +102,54 @@ if [ "$JVM_VERSION" \< "1.8" ] && [ "$JVM_PATCH_VERSION" \< "40" ] ; then exit 1; fi +jvm=`echo "$java_ver_output" | grep -A 1 'java version' | awk 'NR==2 {print $1}'` +case "$jvm" in + OpenJDK) + JVM_VENDOR=OpenJDK + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` + ;; + "Java(TM)") + JVM_VENDOR=Oracle + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $3}'` + ;; + *) + # Help fill in other JVM values + JVM_VENDOR=other + JVM_ARCH=unknown + ;; +esac + # Override these to set the amount of memory to allocate to the JVM at # start-up. For production use you may wish to adjust this for your # environment. MAX_HEAP_SIZE is the total amount of memory dedicated -# to the Java heap. +# to the Java heap. HEAP_NEWSIZE refers to the size of the young +# generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set +# or not (if you set one, set the other). +# +# The main trade-off for the young generation is that the larger it +# is, the longer GC pause times will be. The shorter it is, the more +# expensive GC will be (usually). +# +# The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent pause +# times. If in doubt, and if you do not particularly want to tweak, go with +# 100 MB per physical CPU core. #MAX_HEAP_SIZE="4G" +#HEAP_NEWSIZE="800M" # Set this to control the amount of arenas per-thread in glibc #export MALLOC_ARENA_MAX=4 # only calculate the size if it's not set manually -if [ "x$MAX_HEAP_SIZE" = "x" ] ; then +if [ "x$MAX_HEAP_SIZE" = "x" ] && [ "x$HEAP_NEWSIZE" = "x" ]; then calculate_heap_sizes +else + if [ "x$MAX_HEAP_SIZE" = "x" ] || [ "x$HEAP_NEWSIZE" = "x" ]; then + echo "please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs (see cassandra-env.sh)" + exit 1 + fi fi if [ "x$MALLOC_ARENA_MAX" = "x" ] ; then @@ -158,41 +206,54 @@ esac # Here we create the arguments that will get passed to the jvm when # starting cassandra. +# Read user-defined JVM options from jvm.options file +JVM_OPTS_FILE=$CASSANDRA_CONF/jvm.options +for opt in `grep "^-" $JVM_OPTS_FILE` +do + JVM_OPTS="$JVM_OPTS $opt" +done + +# Check what parameters were defined on jvm.options file to avoid conflicts +echo $JVM_OPTS | grep -q Xmn +DEFINED_XMN=$? +echo $JVM_OPTS | grep -q Xmx +DEFINED_XMX=$? +echo $JVM_OPTS | grep -q Xms +DEFINED_XMS=$? +echo $JVM_OPTS | grep -q UseConcMarkSweepGC +USING_CMS=$? + +# We only set -Xms and -Xmx if they were not defined on jvm.options file +# If defined, both Xmx and Xms should be defined together. +if [ $DEFINED_XMX -ne 0 ] && [ $DEFINED_XMS -ne 0 ]; then + JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" + JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}" +elif [ $DEFINED_XMX -ne 0 ] || [ $DEFINED_XMS -ne 0 ]; then + echo "Please set or unset -Xmx and -Xms flags in pairs on jvm.options file." + exit 1 +fi + +# We only set -Xmn flag if it was not defined in jvm.options file +# and if the CMS GC is being used +# If defined, both Xmn and Xmx should be defined together. +if [ $DEFINED_XMN -eq 0 ] && [ $DEFINED_XMX -ne 0 ]; then + echo "Please set or unset -Xmx and -Xmn flags in pairs on jvm.options file." + exit 1 +elif [ $DEFINED_XMN -ne 0 ] && [ $USING_CMS -eq 0 ]; then + JVM_OPTS="$JVM_OPTS -Xmn${HEAP_NEWSIZE}" +fi + +if [ "$JVM_ARCH" = "64-Bit" ] && [ $USING_CMS -eq 0 ]; then + JVM_OPTS="$JVM_OPTS -XX:+UseCondCardMark" +fi + # enable assertions. disabling this in production will give a modest # performance benefit (around 5%). JVM_OPTS="$JVM_OPTS -ea" -# min and max heap sizes should be set to the same value to avoid -# stop-the-world GC pauses during resize, and so that we can lock the -# heap in memory on startup to prevent any of it from being swapped -# out. -JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" -JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}" - # Per-thread stack size. JVM_OPTS="$JVM_OPTS -Xss256k" -# Use the Hotspot garbage-first collector. -JVM_OPTS="$JVM_OPTS -XX:+UseG1GC" - -# Have the JVM do less remembered set work during STW, instead -# preferring concurrent GC. Reduces p99.9 latency. -JVM_OPTS="$JVM_OPTS -XX:G1RSetUpdatingPauseTimePercent=5" - -# The JVM maximum is 8 PGC threads and 1/4 of that for ConcGC. -# Machines with > 10 cores may need additional threads. Increase to <= full cores. -#JVM_OPTS="$JVM_OPTS -XX:ParallelGCThreads=16" -#JVM_OPTS="$JVM_OPTS -XX:ConcGCThreads=16" - -# Main G1GC tunable: lowering the pause target will lower throughput and vise versa. -# 200ms is the JVM default and lowest viable setting -# 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. -JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=500" - -# Save CPU time on large (>= 16GB) heaps by delaying region scanning -# until the heap is 70% full. The default in Hotspot 8u40 is 40%. -#JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=70" - # Make sure all memory is faulted and zeroed on startup. # This helps prevent soft faults in containers and makes # transparent hugepage allocation more effective. @@ -230,19 +291,6 @@ if [ "x$CASSANDRA_HEAPDUMP_DIR" != "x" ]; then JVM_OPTS="$JVM_OPTS -XX:HeapDumpPath=$CASSANDRA_HEAPDUMP_DIR/cassandra-`date +%s`-pid$$.hprof" fi -# GC logging options -- uncomment to enable -# JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails" -# JVM_OPTS="$JVM_OPTS -XX:+PrintGCDateStamps" -# JVM_OPTS="$JVM_OPTS -XX:+PrintHeapAtGC" -# JVM_OPTS="$JVM_OPTS -XX:+PrintTenuringDistribution" -# JVM_OPTS="$JVM_OPTS -XX:+PrintGCApplicationStoppedTime" -# JVM_OPTS="$JVM_OPTS -XX:+PrintPromotionFailure" -# JVM_OPTS="$JVM_OPTS -XX:PrintFLSStatistics=1" -# JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log" -# JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation" -# JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10" -# JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M" - # Configure the following for JEMallocAllocator and if jemalloc is not available in the system # library path (Example: /usr/local/lib/). Usually "make install" will do the right thing. # export LD_LIBRARY_PATH=<JEMALLOC_HOME>/lib/ http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/conf/jvm.options ---------------------------------------------------------------------- diff --git a/conf/jvm.options b/conf/jvm.options new file mode 100644 index 0000000..60f0f10 --- /dev/null +++ b/conf/jvm.options @@ -0,0 +1,105 @@ +########################################################################### +# jvm.options # +# # +# - all flags defined here will be used by cassandra to startup the JVM # +# - one flag should be specified per line # +# - lines that do not start with '-' will be ignored # +# - only static flags are accepted (no variables or parameters) # +# - dynamic flags will be appended to these on cassandra-env # +########################################################################### + +################# +# HEAP SETTINGS # +################# + +# Heap size is automatically calculated by cassandra-env based on this +# formula: max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB)) +# That is: +# - calculate 1/2 ram and cap to 1024MB +# - calculate 1/4 ram and cap to 8192MB +# - pick the max +# +# For production use you may wish to adjust this for your environment. +# If that's the case, uncomment the -Xmx and Xms options below to override the +# automatic calculation of JVM heap memory. +# +# It is recommended to set min (-Xms) and max (-Xmx) heap sizes to +# the same value to avoid stop-the-world GC pauses during resize, and +# so that we can lock the heap in memory on startup to prevent any +# of it from being swapped out. +#-Xms4G +#-Xmx4G + +# Young generation size is automatically calculated by cassandra-env +# based on this formula: min(100 * num_cores, 1/4 * heap size) +# +# The main trade-off for the young generation is that the larger it +# is, the longer GC pause times will be. The shorter it is, the more +# expensive GC will be (usually). +# +# It is not recommended to set the young generation size if using the +# G1 GC, since that will override the target pause-time goal. +# More info: http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html +# +# The example below assumes a modern 8-core+ machine for decent +# times. If in doubt, and if you do not particularly want to tweak, go +# 100 MB per physical CPU core. +#-Xmn800M + +################# +# GC SETTINGS # +################# + +### CMS Settings + +-XX:+UseParNewGC +-XX:+UseConcMarkSweepGC +-XX:+CMSParallelRemarkEnabled +-XX:SurvivorRatio=8 +-XX:MaxTenuringThreshold=1 +-XX:CMSInitiatingOccupancyFraction=75 +-XX:+UseCMSInitiatingOccupancyOnly +-XX:CMSWaitDuration=10000 +-XX:+CMSParallelInitialMarkEnabled +-XX:+CMSEdenChunksRecordAlways +# some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541 +-XX:+CMSClassUnloadingEnabled + +### G1 Settings (experimental, comment previous section and uncomment section below to enable) + +## Use the Hotspot garbage-first collector. +#-XX:+UseG1GC +# +## Have the JVM do less remembered set work during STW, instead +## preferring concurrent GC. Reduces p99.9 latency. +#-XX:G1RSetUpdatingPauseTimePercent=5 +# +## Main G1GC tunable: lowering the pause target will lower throughput and vise versa. +## 200ms is the JVM default and lowest viable setting +## 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. +#-XX:MaxGCPauseMillis=500 + +## Optional G1 Settings + +# Save CPU time on large (>= 16GB) heaps by delaying region scanning +# until the heap is 70% full. The default in Hotspot 8u40 is 40%. +#-XX:InitiatingHeapOccupancyPercent=70 + +# The JVM maximum is 8 PGC threads and 1/4 of that for ConcGC. +# Machines with > 10 cores may need additional threads. Increase to <= full cores. +#-XX:ParallelGCThreads=16 +#-XX:ConcGCThreads=16 + +### GC logging options -- uncomment to enable + +#-XX:+PrintGCDetails +#-XX:+PrintGCDateStamps +#-XX:+PrintHeapAtGC +#-XX:+PrintTenuringDistribution +#-XX:+PrintGCApplicationStoppedTime +#-XX:+PrintPromotionFailure +#-XX:PrintFLSStatistics=1 +#-Xloggc:/var/log/cassandra/gc.log +#-XX:+UseGCLogFileRotation +#-XX:NumberOfGCLogFiles=10 +#-XX:GCLogFileSize=10M http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/debian/cassandra.install ---------------------------------------------------------------------- diff --git a/debian/cassandra.install b/debian/cassandra.install index ecb6f49..1b66426 100644 --- a/debian/cassandra.install +++ b/debian/cassandra.install @@ -5,6 +5,7 @@ conf/commitlog_archiving.properties etc/cassandra conf/cassandra-topology.properties etc/cassandra conf/logback.xml etc/cassandra conf/logback-tools.xml etc/cassandra +conf/jvm.options etc/cassandra conf/triggers/* etc/cassandra/triggers debian/cassandra.in.sh usr/share/cassandra debian/cassandra.conf etc/security/limits.d http://git-wip-us.apache.org/repos/asf/cassandra/blob/1415fa51/debian/init ---------------------------------------------------------------------- diff --git a/debian/init b/debian/init index 56f2523..a835811 100644 --- a/debian/init +++ b/debian/init @@ -21,6 +21,7 @@ SCRIPTNAME=/etc/init.d/$NAME CONFDIR=/etc/cassandra WAIT_FOR_START=10 CASSANDRA_HOME=/usr/share/cassandra +CASSANDRA_CONF=$CONFDIR FD_LIMIT=100000 [ -e /usr/share/cassandra/apache-cassandra.jar ] || exit 0