jpayne@69
|
1 #!/bin/bash
|
jpayne@69
|
2 #calcmem
|
jpayne@69
|
3
|
jpayne@69
|
4 #function usage(){
|
jpayne@69
|
5 # echo "CalcMem v1.01"
|
jpayne@69
|
6 # echo "Written by Brian Bushnell, Doug Jacobsen, Alex Copeland"
|
jpayne@69
|
7 # echo "Calculates available memory in megabytes"
|
jpayne@69
|
8 # echo "Last modified April 25, 2014"
|
jpayne@69
|
9 #}
|
jpayne@69
|
10
|
jpayne@69
|
11 function parseXmx () {
|
jpayne@69
|
12 local setxmx=0
|
jpayne@69
|
13 local setxms=0
|
jpayne@69
|
14
|
jpayne@69
|
15 for arg in "$@"
|
jpayne@69
|
16 do
|
jpayne@69
|
17 if [[ "$arg" == -Xmx* ]]; then
|
jpayne@69
|
18 z="$arg"
|
jpayne@69
|
19 setxmx=1
|
jpayne@69
|
20 elif [[ "$arg" == Xmx* ]]; then
|
jpayne@69
|
21 z="-$arg"
|
jpayne@69
|
22 setxmx=1
|
jpayne@69
|
23 elif [[ "$arg" == -Xms* ]]; then
|
jpayne@69
|
24 z2="$arg"
|
jpayne@69
|
25 setxms=1
|
jpayne@69
|
26 elif [[ "$arg" == Xms* ]]; then
|
jpayne@69
|
27 z2="-$arg"
|
jpayne@69
|
28 setxms=1
|
jpayne@69
|
29 elif [[ "$arg" == -da ]] || [[ "$arg" == -ea ]]; then
|
jpayne@69
|
30 EA="$arg"
|
jpayne@69
|
31 fi
|
jpayne@69
|
32 done
|
jpayne@69
|
33
|
jpayne@69
|
34 if [[ $setxmx == 1 ]] && [[ $setxms == 0 ]]; then
|
jpayne@69
|
35 local substring=`echo $z| cut -d'x' -f 2`
|
jpayne@69
|
36 z2="-Xms$substring"
|
jpayne@69
|
37 setxms=1
|
jpayne@69
|
38 elif [[ $setxmx == 0 ]] && [[ $setxms == 1 ]]; then
|
jpayne@69
|
39 local substring=`echo $z2| cut -d's' -f 2`
|
jpayne@69
|
40 z="-Xmx$substring"
|
jpayne@69
|
41 setxmx=1
|
jpayne@69
|
42 fi
|
jpayne@69
|
43
|
jpayne@69
|
44 set=$setxmx
|
jpayne@69
|
45 }
|
jpayne@69
|
46
|
jpayne@69
|
47
|
jpayne@69
|
48 RAM=0;
|
jpayne@69
|
49
|
jpayne@69
|
50 function freeRam(){
|
jpayne@69
|
51 #Memory is in kilobytes.
|
jpayne@69
|
52 local defaultMem=3200000
|
jpayne@69
|
53 if [ $# -gt 0 ]; then
|
jpayne@69
|
54 defaultMem=$1;
|
jpayne@69
|
55 case $defaultMem in
|
jpayne@69
|
56 *g)
|
jpayne@69
|
57 defaultMem=`echo $defaultMem| cut -d'g' -f 1`
|
jpayne@69
|
58 defaultMem=$(( $defaultMem * $(( 1024 * 1024 )) ))
|
jpayne@69
|
59 ;;
|
jpayne@69
|
60 *m)
|
jpayne@69
|
61 defaultMem=`echo $defaultMem| cut -d'm' -f 1`
|
jpayne@69
|
62 defaultMem=$(( $defaultMem * 1024 ))
|
jpayne@69
|
63 ;;
|
jpayne@69
|
64 *k)
|
jpayne@69
|
65 defaultMem=`echo $defaultMem| cut -d'k' -f 1`
|
jpayne@69
|
66 ;;
|
jpayne@69
|
67 esac
|
jpayne@69
|
68 fi
|
jpayne@69
|
69
|
jpayne@69
|
70 local mult=84
|
jpayne@69
|
71 if [ $# -gt 1 ]; then
|
jpayne@69
|
72 mult=$2;
|
jpayne@69
|
73 fi
|
jpayne@69
|
74
|
jpayne@69
|
75 #echo "mult = $mult"
|
jpayne@69
|
76 #echo "default = $defaultMem"
|
jpayne@69
|
77
|
jpayne@69
|
78 local ulimit=$(ulimit -v)
|
jpayne@69
|
79 local x=$ulimit
|
jpayne@69
|
80
|
jpayne@69
|
81 if [ -e /proc/meminfo ]; then
|
jpayne@69
|
82 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
|
83 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
|
84
|
jpayne@69
|
85 echo "vfree = $vfree"
|
jpayne@69
|
86 echo "pfree = $pfree"
|
jpayne@69
|
87 echo "ulimit = $ulimit"
|
jpayne@69
|
88
|
jpayne@69
|
89 local x2=0;
|
jpayne@69
|
90
|
jpayne@69
|
91 if [ $vfree -gt 0 ] && [ $pfree -gt 0 ]; then
|
jpayne@69
|
92 if [ $vfree -gt $pfree ]; then x2=$pfree;
|
jpayne@69
|
93 else x2=$vfree; fi
|
jpayne@69
|
94 elif [ $vfree -gt 0 ]; then x2=$vfree;
|
jpayne@69
|
95 elif [ $pfree -gt 0 ]; then x2=$pfree;
|
jpayne@69
|
96 fi
|
jpayne@69
|
97
|
jpayne@69
|
98 echo $x
|
jpayne@69
|
99 echo $x2
|
jpayne@69
|
100 echo $vfree
|
jpayne@69
|
101 echo $pfree
|
jpayne@69
|
102
|
jpayne@69
|
103 if [ "$x" = "unlimited" ] || (($x > $x2)); then x=$x2; fi
|
jpayne@69
|
104
|
jpayne@69
|
105 fi
|
jpayne@69
|
106
|
jpayne@69
|
107 #echo "x=$x"
|
jpayne@69
|
108 local HOSTNAME=`hostname`
|
jpayne@69
|
109 if [ $x -lt 1 ] || [[ $HOSTNAME == genepool* ]]; then
|
jpayne@69
|
110 #echo "hello 2"
|
jpayne@69
|
111 #echo $x
|
jpayne@69
|
112 #echo "ram is unlimited"
|
jpayne@69
|
113 RAM=$((defaultMem/1024))
|
jpayne@69
|
114 echo "Max memory cannot be determined. Attempting to use $RAM MB." 1>&2
|
jpayne@69
|
115 echo "If this fails, please set ulimit or run this program qsubbed or from a qlogin session on Genepool." 1>&2
|
jpayne@69
|
116 else
|
jpayne@69
|
117 #echo "hello 1"
|
jpayne@69
|
118 #echo $x
|
jpayne@69
|
119
|
jpayne@69
|
120 #if [ $x -ge 1000000000 ]; then
|
jpayne@69
|
121 # echo "ram is 1000g+"
|
jpayne@69
|
122 #elif [ $x -ge 500000000 ]; then
|
jpayne@69
|
123 # echo "ram is 500g+"
|
jpayne@69
|
124 #elif [ $x -ge 250000000 ]; then
|
jpayne@69
|
125 # echo "ram is 250g+"
|
jpayne@69
|
126 #elif [ $x -ge 144000000 ]; then
|
jpayne@69
|
127 # echo "ram is 144g+"
|
jpayne@69
|
128 #elif [ $x -ge 120000000 ]; then
|
jpayne@69
|
129 # echo "ram is 120g+"
|
jpayne@69
|
130 #elif [ $x -ge 40000000 ]; then
|
jpayne@69
|
131 # echo "ram is 40g+"
|
jpayne@69
|
132 #else
|
jpayne@69
|
133 # echo "ram is under 40g"
|
jpayne@69
|
134 #fi
|
jpayne@69
|
135 #echo $x
|
jpayne@69
|
136 RAM=$(( ((x-500000)*mult/100)/1024 ))
|
jpayne@69
|
137 #echo $RAM
|
jpayne@69
|
138 fi
|
jpayne@69
|
139
|
jpayne@69
|
140 echo $set
|
jpayne@69
|
141 echo $z
|
jpayne@69
|
142 echo $z2
|
jpayne@69
|
143
|
jpayne@69
|
144 #local z="-Xmx${RAM}m"
|
jpayne@69
|
145 return 0
|
jpayne@69
|
146 }
|
jpayne@69
|
147
|
jpayne@69
|
148 parseXmx "$@"
|
jpayne@69
|
149 freeRam "$@"
|