8 threads - copy of threads, with another ps option. commented out all but linux.
12 # Search for program in $PATH unless predefined.
16 # Find operating system
17 [ $OPERSYS ] || OPERSYS=`uname` || exit 1
19 if [ "$1" = "autoconf" ]; then
24 . $MUNIN_LIBDIR/plugins/plugin.sh
27 RUNNABLE='22ff22' # Green
28 SLEEPING='0022ff' # Blue
29 STOPPED='cc0000' # Darker red
30 ZOMBIE='990000' # Darkest red
31 UNINTERRUPTIBLE='ffa500' # Orange
32 IDLE='4169e1' # Royal blue
33 PAGING='00aaaa' # Darker turquoise
34 INTERRUPT='ff00ff' # Fuchsia
35 LOCK='ff3333' # Lighter red
36 RUNNING='00ff7f' # Spring green
38 SUSPENDED='ff1493' # Deep pink
39 TOTAL='c0c0c0' # Silver
42 # R - Linux, SunOS, FreeBSD, OpenBSD, NetBSD, OSX (runable)
43 # S - Linux, SunOS, FreeBSD*, OpenBSD*, NetBSD*, OSX* (sleeping)
44 # T - Linux, SunOS, FreeBSD, OpenBSD, NetBSD, OSX (stopped)
45 # Z - Linux, SunOS, FreeBSD, OpenBSD, NetBSD, OSX (zombie)
46 # D - Linux, FreeBSD, OpenBSD, NetBSD (uninterruptible)
47 # I - FreeBSD, OpenBSD, NetBSD, OSX (idle)
48 # W - Linux*, FreeBSD* (paging/interrupt)
52 # U - OSX, NetBSD* (uninterruptible/suspended)
55 if [ "$1" = "config" ]; then
56 echo "graph_title Threads"
57 echo "graph_info This graph shows the number of threads"
58 echo "graph_category system"
59 echo "graph_args --base 1000 -l 0"
60 echo "graph_vlabel Number of threads"
63 # if [ "$OPERSYS" = "Linux" ]; then
64 echo "graph_order sleeping stopped zombie dead paging uninterruptible runnable threads"
65 echo "dead.label dead"
66 echo "dead.draw STACK"
67 echo "dead.colour $DEAD"
68 echo "dead.info The number of dead threads."
71 echo "paging.label paging"
72 echo "paging.draw STACK"
73 echo "paging.colour $PAGING"
74 echo "paging.info The number of paging threads (<2.6 kernels only)."
78 # elif [ "$OPERSYS" = "SunOS" ]; then
79 # echo "graph_order sleeping stopped zombie runnable running total"
80 # echo "running.label running"
81 # echo "running.draw STACK"
82 # echo "running.colour $RUNNING"
83 # echo "running.info The number of threads that are running on a processor."
84 # print_warning running
85 # print_critical running
86 # # Be backwards compatible.
87 # echo "total.label total"
88 # echo "total.draw LINE1"
89 # echo "total.colour $TOTAL"
90 # echo "total.info The total number of threads."
92 # print_critical total
94 # elif [ "$OPERSYS" = "FreeBSD" ]; then
95 # echo "graph_order sleeping idle stopped zombie lock uninterruptible interrupt runnable threads"
96 # echo "lock.label lock"
97 # echo "lock.draw STACK"
98 # echo "lock.colour $LOCK"
99 # echo "lock.info The number of threads that are waiting to acquire a lock."
101 # print_critical lock
102 # echo "interrupt.label interrupt"
103 # echo "interrupt.draw STACK"
104 # echo "interrupt.colour $INTERRUPT"
105 # echo "interrupt.info The number of idle interrupt threads."
106 # print_warning interrupt
107 # print_critical interrupt
109 # elif [ "$OPERSYS" = "OpenBSD" ]; then
110 # echo "graph_order sleeping idle stopped zombie uninterruptible runnable threads"
112 # elif [ "$OPERSYS" = "NetBSD" ]; then
113 # echo "graph_order sleeping idle stopped zombie uninterruptible suspended runnable threads"
114 # echo "suspended.label suspended"
115 # echo "suspended.draw STACK"
116 # echo "suspended.colour $SUSPENDED"
117 # echo "suspended.info The number of threads that are suspended."
118 # print_warning suspended
119 # print_critical suspended
121 # elif [ "$OPERSYS" = "Darwin" ]; then
122 # echo "graph_order sleeping idle stopped zombie uninterruptible running threads"
123 # echo "uninterruptible.label uninterruptible"
124 # echo "uninterruptible.draw STACK"
125 # echo "uninterruptible.colour $UNINTERRUPTIBLE"
126 # echo "uninterruptible.info The number of uninterruptible threads (usually IO)."
127 # print_warning uninterruptible
128 # print_critical uninterruptible
131 # # Common flags for some OS
132 # if [ "$OPERSYS" = "FreeBSD" ] || [ "$OPERSYS" = "OpenBSD" ] ||
133 # [ "$OPERSYS" = "NetBSD" ] || [ "$OPERSYS" = "Darwin" ]; then
134 # echo "idle.label idle"
135 # echo "idle.draw STACK"
136 # echo "idle.colour $IDLE"
137 # echo "idle.info The number of threads that are idle (sleeping for longer than about 20 seconds)."
139 # print_critical idle
140 # echo "sleeping.label sleeping"
141 # echo "sleeping.draw AREA"
142 # echo "sleeping.colour $SLEEPING"
143 # echo "sleeping.info The number of threads that are sleeping for less than about 20 seconds."
144 # print_warning sleeping
145 # print_critical sleeping
147 echo "sleeping.label sleeping"
148 echo "sleeping.draw AREA"
149 echo "sleeping.colour $SLEEPING"
150 echo "sleeping.info The number of sleeping threads."
151 print_warning sleeping
152 print_critical sleeping
155 if [ "$OPERSYS" = "Linux" ] || [ "$OPERSYS" = "FreeBSD" ] ||
156 [ "$OPERSYS" = "OpenBSD" ] || [ "$OPERSYS" = "NetBSD" ]; then
157 echo "uninterruptible.label uninterruptible"
158 echo "uninterruptible.draw STACK"
159 echo "uninterruptible.colour $UNINTERRUPTIBLE"
160 echo "uninterruptible.info The number of uninterruptible threads (usually IO)."
161 print_warning uninterruptible
162 print_critical uninterruptible
166 echo "zombie.label zombie"
167 echo "zombie.draw STACK"
168 echo "zombie.colour $ZOMBIE"
169 echo "zombie.info The number of defunct ("zombie") threads (thread terminated and parent not waiting)."
171 print_critical zombie
173 echo "stopped.label stopped"
174 echo "stopped.draw STACK"
175 echo "stopped.colour $STOPPED"
176 echo "stopped.info The number of stopped or traced threads."
177 print_warning stopped
178 print_critical stopped
180 echo "runnable.label runnable"
181 echo "runnable.draw STACK"
182 echo "runnable.colour $RUNNABLE"
183 echo "runnable.info The number of runnable threads (on the run queue)."
184 print_warning runnable
185 print_critical runnable
187 if [ "$OPERSYS" != "SunOS" ]; then
188 # Not using 'graph_total' due to backwards compability. SunOS uses 'total'.
189 #echo 'graph_total total'
190 echo "threads.label total"
191 echo "threads.draw LINE1"
192 echo "threads.colour $TOTAL"
193 echo "threads.info The total number of threads."
194 print_warning threads
195 print_critical threads
201 #if [ "$OPERSYS" = "Linux" ]; then
202 $ps --no-header -eTo s | $awk '
203 { threads++; stat[$1]++ }
205 print "threads.value " 0+threads;
206 print "uninterruptible.value " 0+stat["D"];
207 print "runnable.value " 0+stat["R"];
208 print "sleeping.value " 0+stat["S"];
209 print "stopped.value " 0+stat["T"];
210 print "paging.value " 0+stat["W"];
211 print "dead.value " 0+stat["X"];
212 print "zombie.value " 0+stat["Z"];
215 #elif [ "$OPERSYS" = "SunOS" ]; then
216 # $ps -e -o s | $awk '
217 #{ total++; stat[$1]++ }
219 #print "total.value " 0+total;
220 #print "running.value " 0+stat["O"];
221 #print "sleeping.value " 0+stat["S"];
222 #print "runnable.value " 0+stat["R"];
223 #print "stopped.value " 0+stat["T"];
224 #print "zombie.value " 0+stat["Z"];
226 #elif [ "$OPERSYS" = "FreeBSD" ]; then
227 # $ps -axo state= | sed -e 's/^\(.\).*/\1/' | $awk '
228 #{ threads++; stat[$1]++ }
230 #print "threads.value " 0+threads;
231 #print "uninterruptible.value " 0+stat["D"];
232 #print "idle.value " 0+stat["I"];
233 #print "lock.value " 0+stat["G"];
234 #print "runnable.value " 0+stat["R"];
235 #print "sleeping.value " 0+stat["S"];
236 #print "stopped.value " 0+stat["T"];
237 #print "interrupt.value " 0+stat["W"];
238 #print "zombie.value " 0+stat["Z"];
240 #elif [ "$OPERSYS" = "OpenBSD" ]; then
241 # # First line is header. Remove it.
242 # $ps -axo state= | sed '1d' | sed -e 's/^\(.\).*/\1/' | $awk '
243 #{ threads++; stat[$1]++ }
245 #print "threads.value " 0+threads;
246 #print "uninterruptible.value " 0+stat["D"];
247 #print "idle.value " 0+stat["I"];
248 #print "runnable.value " 0+stat["R"];
249 #print "sleeping.value " 0+stat["S"];
250 #print "stopped.value " 0+stat["T"];
251 #print "zombie.value " 0+stat["Z"];
253 #elif [ "$OPERSYS" = "NetBSD" ]; then
254 # # First line is header. Remove it.
255 # $ps -axo state= | sed '1d' | sed -e 's/^\(.\).*/\1/' | $awk '
256 #{ threads++; stat[$1]++ }
258 #print "threads.value " 0+threads;
259 #print "uninterruptible.value " 0+stat["D"];
260 #print "idle.value " 0+stat["I"];
261 #print "suspended.value " 0+stat["U"];
262 #print "runnable.value " 0+stat["R"];
263 #print "sleeping.value " 0+stat["S"];
264 #print "stopped.value " 0+stat["T"];
265 #print "zombie.value " 0+stat["Z"];
268 #elif [ "$OPERSYS" = "Darwin" ]; then
269 # # First line is header. Remove it.
270 # $ps -axo state= | sed '1d' | sed -e 's/^\(.\).*/\1/' | $awk '
271 #{ threads++; stat[$1]++ }
273 #print "threads.value " 0+threads;
274 #print "uninterruptible.value " 0+stat["U"];
275 #print "idle.value " 0+stat["I"];
276 #print "runnable.value " 0+stat["R"];
277 #print "sleeping.value " 0+stat["S"];
278 #print "stopped.value " 0+stat["T"];
279 #print "zombie.value " 0+stat["Z"];