#! /bin/sh ## 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. ## ============================================== ## Environment variables: ## JVM_ARGS - optional java args, e.g. -Dprop=val ## ## e.g. ## JVM_ARGS="-Xms512m -Xmx512m" jmeter etc. ## ## ============================================== # Minimal version to run JMeter MINIMAL_VERSION=1.8.0 # Check if Java is present and the minimal version requirement _java=`type java | awk '{ print $ NF }'` CURRENT_VERSION=`"$_java" -version 2>&1 | awk -F'"' '/version/ {print $2}'` minimal_version=`echo $MINIMAL_VERSION | awk -F'.' '{ print $2 }'` current_version=`echo $CURRENT_VERSION | awk -F'.' '{ print $2 }'` if [ $current_version ]; then if [ $current_version -lt $minimal_version ]; then echo "Error: Java version is too low to run JMeter. Needs at least Java >= ${MINIMAL_VERSION}." exit 1 fi else echo "Not able to find Java executable or version. Please check your Java installation." exit 1 fi JMETER_OPTS="" case `uname` in Darwin*) # Add Mac-specific property - should be ignored elsewhere (Bug 47064) JMETER_OPTS="-Xdock:name=JMeter -Xdock:icon="`dirname $0`/../docs/images/jmeter_square.png" -Dapple.laf.useScreenMenuBar=true -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS" ;; esac # resolve links - $0 may be a softlink (code as used by Tomcat) # N.B. readlink would be a lot simpler but is not supported on Solaris PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done PRGDIR=`dirname "$PRG"` # # Original page has disappeared, it is now only available at: # https://web.archive.org/web/20060614151434/http://www.atg.com/portal/myatg/developer?paf_dm=full&paf_gear_id=1100010&detailArticle=true&id=9606 # # JMeter objects can generally be grouped into three life-length groups: # # - Per-sample objects (results, DOMs,...). An awful lot of those. # Life length of milliseconds to a few seconds. # # - Per-run objects (threads, listener data structures,...). Not that many # of those unless we use the table or tree listeners on heavy runs. # Life length of minutes to several hours, from creation to start of next run. # # - Per-work-session objects (test plans, GUIs,...). # Life length: for the life of the JVM. # This is the base heap size -- you may increase or decrease it to fit your # system's memory availability: HEAP="-Xms512m -Xmx512m" #VERBOSE_GC="-verbose:gc -Xloggc:gc_jmeter_%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps" # Finally, some tracing to help in case things go astray: GC_ALGO="-XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:G1ReservePercent=20" # Always dump on OOM (does not cost anything unless triggered) DUMP="-XX:+HeapDumpOnOutOfMemoryError" SYSTEM_PROPS="-Djava.security.egd=file:/dev/urandom" SERVER="-server" ARGS="$SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS" java $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"