Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Licensed to the Apache Software Foundation (ASF) under one
- # or more contributor license agreements. See the NOTICE file
- # distributed with this work for additional information
- # regarding copyright ownership. The ASF licenses this file
- # to you under the Apache License, Version 2.0 (the
- # "License"); you may not use this file except in compliance
- # with the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- calculate_heap_sizes()
- {
- case "`uname`" in
- Linux)
- system_memory_in_mb=`free -m | awk '/Mem:/ {print $2}'`
- system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*' /proc/cpuinfo`
- ;;
- FreeBSD)
- system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
- system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
- system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
- ;;
- SunOS)
- system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
- system_cpu_cores=`psrinfo | wc -l`
- ;;
- Darwin)
- system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
- system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
- system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
- ;;
- *)
- # assume reasonable defaults for e.g. a modern desktop or
- # cheap server
- system_memory_in_mb="2048"
- system_cpu_cores="2"
- ;;
- esac
- # some systems like the raspberry pi don't report cores, use at least 1
- if [ "$system_cpu_cores" -lt "1" ]
- then
- system_cpu_cores="1"
- fi
- # set max heap size based on the following
- # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
- # calculate 1/2 ram and cap to 1024MB
- # calculate 1/4 ram and cap to 8192MB
- # pick the max
- half_system_memory_in_mb=`expr $system_memory_in_mb / 2`
- quarter_system_memory_in_mb=`expr $half_system_memory_in_mb / 2`
- if [ "$half_system_memory_in_mb" -gt "1024" ]
- then
- half_system_memory_in_mb="1024"
- fi
- if [ "$quarter_system_memory_in_mb" -gt "8192" ]
- then
- quarter_system_memory_in_mb="8192"
- fi
- if [ "$half_system_memory_in_mb" -gt "$quarter_system_memory_in_mb" ]
- then
- max_heap_size_in_mb="$half_system_memory_in_mb"
- else
- 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.
- java_ver_output=`"${JAVA:-java}" -version 2>&1`
- jvmver=`echo "$java_ver_output" | awk -F'"' 'NR==1 {print $2}'`
- JVM_VERSION=${jvmver%_*}
- JVM_PATCH_VERSION=${jvmver#*_}
- jvm=`echo "$java_ver_output" | 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; 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="8G"
- HEAP_NEWSIZE="2G"
- 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
- # Specifies the default port over which Cassandra will be available for
- # JMX connections.
- JMX_PORT="7199"
- # Here we create the arguments that will get passed to the jvm when
- # starting cassandra.
- # enable assertions. disabling this in production will give a modest
- # performance benefit (around 5%).
- JVM_OPTS="$JVM_OPTS -ea"
- # add the jamm javaagent
- if [ "$JVM_VENDOR" != "OpenJDK" -o "$JVM_VERSION" \> "1.6.0" ] \
- || [ "$JVM_VERSION" = "1.6.0" -a "$JVM_PATCH_VERSION" -ge 23 ]
- then
- JVM_OPTS="$JVM_OPTS -javaagent:$CASSANDRA_HOME/lib/jamm-0.2.5.jar"
- fi
- # enable thread priorities, primarily so we can give periodic tasks
- # a lower priority to avoid interfering with client workload
- JVM_OPTS="$JVM_OPTS -XX:+UseThreadPriorities"
- # allows lowering thread priority without being root. see
- # http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html
- JVM_OPTS="$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, 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}"
- JVM_OPTS="$JVM_OPTS -Xmn${HEAP_NEWSIZE}"
- JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError"
- # set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR
- if [ "x$CASSANDRA_HEAPDUMP_DIR" != "x" ]; then
- JVM_OPTS="$JVM_OPTS -XX:HeapDumpPath=$CASSANDRA_HEAPDUMP_DIR/cassandra-`date +%s`-pid$$.hprof"
- fi
- startswith() { [ "${1#$2}" != "$1" ]; }
- if [ "`uname`" = "Linux" ] ; then
- # reduce the per-thread stack size to minimize the impact of Thrift
- # thread-per-client. (Best practice is for client connections to
- # be pooled anyway.) Only do so on Linux where it is known to be
- # supported.
- # u34 and greater need 180k
- JVM_OPTS="$JVM_OPTS -Xss256k"
- fi
- echo "xss = $JVM_OPTS"
- # GC tuning options
- JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC"
- JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC"
- JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled"
- JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=4"
- JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=2"
- JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75"
- JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
- JVM_OPTS="$JVM_OPTS -XX:MaxPermSize=128m"
- JVM_OPTS="$JVM_OPTS -XX:+UseTLAB"
- # note: bash evals '1.7.x' as > '1.7' so this is really a >= 1.7 jvm check
- if [ "$JVM_VERSION" \> "1.7" ] ; then
- JVM_OPTS="$JVM_OPTS -XX:+UseCondCardMark"
- 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-`date +%s`.log"
- # If you are using JDK 6u34 7u2 or later you can enable GC log rotation
- # don't stick the date in the log name if rotation is on.
- JVM_OPTS="$JVM_OPTS -Xloggc:/opt/others/logs/cassandra/gc.log"
- JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
- JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
- JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=100M"
- # uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414
- # JVM_OPTS="$JVM_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414"
- # Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See
- # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version:
- # comment out this entry to enable IPv6 support).
- JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true"
- # jmx: metrics and administration interface
- #
- # add this if you're having trouble connecting:
- # JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>"
- #
- # see
- # https://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
- # for more on configuring JMX through firewalls, etc. (Short version:
- # get it working with no firewall first.)
- JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
- JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
- JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
- JVM_OPTS="$JVM_OPTS $JVM_EXTRA_OPTS"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement