########################################################################### # 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 # ########################################################################### ###################### # STARTUP PARAMETERS # ###################### # Uncomment any of the following properties to enable specific startup parameters # In a multi-instance deployment, multiple Cassandra instances will independently assume that all # CPU processors are available to it. This setting allows you to specify a smaller set of processors # and perhaps have affinity. #-Dcassandra.available_processors=number_of_processors # The directory location of the cassandra.yaml file. #-Dcassandra.config=directory # Sets the initial partitioner token for a node the first time the node is started. #-Dcassandra.initial_token=token # Set to false to start Cassandra on a node but not have the node join the cluster. #-Dcassandra.join_ring=true|false # Set to false to clear all gossip state for the node on restart. Use when you have changed node # information in cassandra.yaml (such as listen_address). #-Dcassandra.load_ring_state=true|false # Enable pluggable metrics reporter. See Pluggable metrics reporting in Cassandra 2.0.2. #-Dcassandra.metricsReporterConfigFile=file # Set the port on which the CQL native transport listens for clients. (Default: 9042) #-Dcassandra.native_transport_port=port # Overrides the partitioner. (Default: org.apache.cassandra.dht.Murmur3Partitioner) #-Dcassandra.partitioner=partitioner # To replace a node that has died, restart a new node in its place specifying the address of the # dead node. The new node must not have any data in its data directory, that is, it must be in the # same state as before bootstrapping. #-Dcassandra.replace_address=listen_address or broadcast_address of dead node # Allow restoring specific tables from an archived commit log. #-Dcassandra.replayList=table # Allows overriding of the default RING_DELAY (1000ms), which is the amount of time a node waits # before joining the ring. #-Dcassandra.ring_delay_ms=ms # Set the port for the Thrift RPC service, which is used for client connections. (Default: 9160) #-Dcassandra.rpc_port=port # Set the SSL port for encrypted communication. (Default: 7001) #-Dcassandra.ssl_storage_port=port # Enable or disable the native transport server. See start_native_transport in cassandra.yaml. # cassandra.start_native_transport=true|false # Enable or disable the Thrift RPC server. (Default: true) #-Dcassandra.start_rpc=true/false # Set the port for inter-node communication. (Default: 7000) #-Dcassandra.storage_port=port # Set the default location for the trigger JARs. (Default: conf/triggers) #-Dcassandra.triggers_dir=directory # For testing new compaction and compression strategies. It allows you to experiment with different # strategies and benchmark write performance differences without affecting the production workload. #-Dcassandra.write_survey=true # To disable configuration via JMX of auth caches (such as those for credentials, permissions and # roles). This will mean those config options can only be set (persistently) in cassandra.yaml # and will require a restart for new values to take effect. #-Dcassandra.disable_auth_caches_remote_configuration=true ######################## # GENERAL JVM SETTINGS # ######################## # enable assertions. disabling this in production will give a modest # performance benefit (around 5%). -ea # enable thread priorities, primarily so we can give periodic tasks # a lower priority to avoid interfering with client workload -XX:+UseThreadPriorities # allows lowering thread priority without being root on linux - probably # not necessary on Windows but doesn't harm anything. # see http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workar -XX:ThreadPriorityPolicy=42 # Enable heap-dump if there's an OOM -XX:+HeapDumpOnOutOfMemoryError # Per-thread stack size. -Xss256k # Larger interned string table, for gossip's benefit (CASSANDRA-6410) -XX:StringTableSize=1000003 # Make sure all memory is faulted and zeroed on startup. # This helps prevent soft faults in containers and makes # transparent hugepage allocation more effective. -XX:+AlwaysPreTouch # Disable biased locking as it does not benefit Cassandra. -XX:-UseBiasedLocking # Enable thread-local allocation blocks and allow the JVM to automatically # resize them at runtime. -XX:+UseTLAB -XX:+ResizeTLAB # http://www.evanjones.ca/jvm-mmap-pause.html -XX:+PerfDisableSharedMem # Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See # https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6342561 (short version: # comment out this entry to enable IPv6 support). -Djava.net.preferIPv4Stack=true ### Debug options # uncomment to enable flight recorder #-XX:+UnlockCommercialFeatures #-XX:+FlightRecorder # uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414 #-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414 # uncomment to have Cassandra JVM log internal method compilation (developers only) #-XX:+UnlockDiagnosticVMOptions #-XX:+LogCompilation ################# # 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 # For systems with > 8 cores, the default ParallelGCThreads is 5/8 the number of logical cores. # Otherwise equal to the number of cores when 8 or less. # Machines with > 10 cores should try setting these to <= full cores. #-XX:ParallelGCThreads=16 # By default, ConcGCThreads is 1/4 of ParallelGCThreads. # Setting both to the same value can reduce STW durations. #-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