jpayne@69: #!/bin/bash jpayne@69: #calcmem jpayne@69: jpayne@69: #function usage(){ jpayne@69: # echo "CalcMem v1.01" jpayne@69: # echo "Written by Brian Bushnell, Doug Jacobsen, Alex Copeland" jpayne@69: # echo "Calculates available memory in megabytes" jpayne@69: # echo "Last modified April 25, 2014" jpayne@69: #} jpayne@69: jpayne@69: function parseXmx () { jpayne@69: local setxmx=0 jpayne@69: local setxms=0 jpayne@69: jpayne@69: for arg in "$@" jpayne@69: do jpayne@69: if [[ "$arg" == -Xmx* ]]; then jpayne@69: z="$arg" jpayne@69: setxmx=1 jpayne@69: elif [[ "$arg" == Xmx* ]]; then jpayne@69: z="-$arg" jpayne@69: setxmx=1 jpayne@69: elif [[ "$arg" == -Xms* ]]; then jpayne@69: z2="$arg" jpayne@69: setxms=1 jpayne@69: elif [[ "$arg" == Xms* ]]; then jpayne@69: z2="-$arg" jpayne@69: setxms=1 jpayne@69: elif [[ "$arg" == -da ]] || [[ "$arg" == -ea ]]; then jpayne@69: EA="$arg" jpayne@69: fi jpayne@69: done jpayne@69: jpayne@69: if [[ $setxmx == 1 ]] && [[ $setxms == 0 ]]; then jpayne@69: local substring=`echo $z| cut -d'x' -f 2` jpayne@69: z2="-Xms$substring" jpayne@69: setxms=1 jpayne@69: elif [[ $setxmx == 0 ]] && [[ $setxms == 1 ]]; then jpayne@69: local substring=`echo $z2| cut -d's' -f 2` jpayne@69: z="-Xmx$substring" jpayne@69: setxmx=1 jpayne@69: fi jpayne@69: jpayne@69: set=$setxmx jpayne@69: } jpayne@69: jpayne@69: jpayne@69: RAM=0; jpayne@69: jpayne@69: function freeRam(){ jpayne@69: #Memory is in kilobytes. jpayne@69: local defaultMem=3200000 jpayne@69: if [ $# -gt 0 ]; then jpayne@69: defaultMem=$1; jpayne@69: case $defaultMem in jpayne@69: *g) jpayne@69: defaultMem=`echo $defaultMem| cut -d'g' -f 1` jpayne@69: defaultMem=$(( $defaultMem * $(( 1024 * 1024 )) )) jpayne@69: ;; jpayne@69: *m) jpayne@69: defaultMem=`echo $defaultMem| cut -d'm' -f 1` jpayne@69: defaultMem=$(( $defaultMem * 1024 )) jpayne@69: ;; jpayne@69: *k) jpayne@69: defaultMem=`echo $defaultMem| cut -d'k' -f 1` jpayne@69: ;; jpayne@69: esac jpayne@69: fi jpayne@69: jpayne@69: local mult=84 jpayne@69: if [ $# -gt 1 ]; then jpayne@69: mult=$2; jpayne@69: fi jpayne@69: jpayne@69: #echo "mult = $mult" jpayne@69: #echo "default = $defaultMem" jpayne@69: jpayne@69: local ulimit=$(ulimit -v) jpayne@69: local x=$ulimit jpayne@69: jpayne@69: if [ -e /proc/meminfo ]; then jpayne@69: local vfree=$(cat /proc/meminfo | awk -F: 'BEGIN{total=-1;used=-1} /^CommitLimit:/ { total=$2 }; /^Committed_AS:/ { used=$2 } END{ print (total-used) }') jpayne@69: local pfree=$(cat /proc/meminfo | awk -F: 'BEGIN{free=-1;cached=-1;buffers=-1} /^MemFree:/ { free=$2 }; /^Cached:/ { cached=$2}; /^Buffers:/ { buffers=$2} END{ print (free+cached+buffers) }') jpayne@69: jpayne@69: echo "vfree = $vfree" jpayne@69: echo "pfree = $pfree" jpayne@69: echo "ulimit = $ulimit" jpayne@69: jpayne@69: local x2=0; jpayne@69: jpayne@69: if [ $vfree -gt 0 ] && [ $pfree -gt 0 ]; then jpayne@69: if [ $vfree -gt $pfree ]; then x2=$pfree; jpayne@69: else x2=$vfree; fi jpayne@69: elif [ $vfree -gt 0 ]; then x2=$vfree; jpayne@69: elif [ $pfree -gt 0 ]; then x2=$pfree; jpayne@69: fi jpayne@69: jpayne@69: echo $x jpayne@69: echo $x2 jpayne@69: echo $vfree jpayne@69: echo $pfree jpayne@69: jpayne@69: if [ "$x" = "unlimited" ] || (($x > $x2)); then x=$x2; fi jpayne@69: jpayne@69: fi jpayne@69: jpayne@69: #echo "x=$x" jpayne@69: local HOSTNAME=`hostname` jpayne@69: if [ $x -lt 1 ] || [[ $HOSTNAME == genepool* ]]; then jpayne@69: #echo "hello 2" jpayne@69: #echo $x jpayne@69: #echo "ram is unlimited" jpayne@69: RAM=$((defaultMem/1024)) jpayne@69: echo "Max memory cannot be determined. Attempting to use $RAM MB." 1>&2 jpayne@69: echo "If this fails, please set ulimit or run this program qsubbed or from a qlogin session on Genepool." 1>&2 jpayne@69: else jpayne@69: #echo "hello 1" jpayne@69: #echo $x jpayne@69: jpayne@69: #if [ $x -ge 1000000000 ]; then jpayne@69: # echo "ram is 1000g+" jpayne@69: #elif [ $x -ge 500000000 ]; then jpayne@69: # echo "ram is 500g+" jpayne@69: #elif [ $x -ge 250000000 ]; then jpayne@69: # echo "ram is 250g+" jpayne@69: #elif [ $x -ge 144000000 ]; then jpayne@69: # echo "ram is 144g+" jpayne@69: #elif [ $x -ge 120000000 ]; then jpayne@69: # echo "ram is 120g+" jpayne@69: #elif [ $x -ge 40000000 ]; then jpayne@69: # echo "ram is 40g+" jpayne@69: #else jpayne@69: # echo "ram is under 40g" jpayne@69: #fi jpayne@69: #echo $x jpayne@69: RAM=$(( ((x-500000)*mult/100)/1024 )) jpayne@69: #echo $RAM jpayne@69: fi jpayne@69: jpayne@69: echo $set jpayne@69: echo $z jpayne@69: echo $z2 jpayne@69: jpayne@69: #local z="-Xmx${RAM}m" jpayne@69: return 0 jpayne@69: } jpayne@69: jpayne@69: parseXmx "$@" jpayne@69: freeRam "$@"