summaryrefslogtreecommitdiff
path: root/evergreen/functions/process_threads_monitor.sh
diff options
context:
space:
mode:
Diffstat (limited to 'evergreen/functions/process_threads_monitor.sh')
-rwxr-xr-xevergreen/functions/process_threads_monitor.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/evergreen/functions/process_threads_monitor.sh b/evergreen/functions/process_threads_monitor.sh
new file mode 100755
index 00000000000..c28269a1552
--- /dev/null
+++ b/evergreen/functions/process_threads_monitor.sh
@@ -0,0 +1,46 @@
+DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+. "$DIR/../prelude.sh"
+
+proc_list="(java|lein|mongo|python|_test$|_test\.exe$)"
+if [ "Windows_NT" = "$OS" ]; then
+ get_pids() {
+ proc_pids=$(tasklist /fo:csv \
+ | awk -F'","' '{x=$1; gsub("\"","",x); print $2, x}' \
+ | grep -iE $1 \
+ | cut -f1 -d ' ')
+ }
+ get_process_info() {
+ proc_name=""
+ proc_info=$(wmic process where "ProcessId=\"$1\"" get "Name,ProcessId,ThreadCount" /format:csv 2>/dev/null | grep $1)
+ if [ ! -z $proc_info ]; then
+ proc_name=$(echo $proc_info | cut -f2 -d ',')
+ proc_threads=$(echo $proc_info | cut -f4 -d ',')
+ fi
+ }
+else
+ get_pids() { proc_pids=$(pgrep $1); }
+ get_process_info() {
+ proc_name=$(ps -p $1 -o comm=)
+ # /proc is available on Linux platforms
+ if [ -f /proc/$1/status ]; then
+ set_sudo
+ proc_threads=$($sudo grep Threads /proc/$1/status | sed "s/\s//g" | cut -f2 -d ":")
+ else
+ proc_threads=$(ps -AM $1 | grep -vc PID)
+ fi
+ }
+fi
+while [ 1 ]; do
+ get_pids $proc_list
+ if [ ! -z "$proc_pids" ]; then
+ printf "Running process/thread counter\n"
+ printf "PROCESS\tPID\tTHREADS\n"
+ fi
+ for pid in $proc_pids; do
+ get_process_info $pid
+ if [ ! -z "$proc_name" ]; then
+ printf "$proc_name\t$pid\t$proc_threads\n"
+ fi
+ done
+ sleep 60
+done