diff options
Diffstat (limited to 'extras')
| -rwxr-xr-x | extras/devel-tools/strace-brick.sh | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/extras/devel-tools/strace-brick.sh b/extras/devel-tools/strace-brick.sh new file mode 100755 index 00000000000..a140729111c --- /dev/null +++ b/extras/devel-tools/strace-brick.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Usage: +# nice -n -19 strace-brick.sh glusterfsd 50 + +brick_process_name=$1 +min_watch_cpu=$2 +if [ ! $brick_process_name ]; then +        brick_process_name=glusterfsd +fi + +if [ ! $min_watch_cpu ]; then +        min_watch_cpu=50 +fi + +echo "min_watch_cpu: $min_watch_cpu" + +break=false + +while ! $break; +do +        mypids=( $(pgrep $brick_process_name) ) +        echo "mypids: ${mypids[*]}" + +        pid_args=$(echo ${mypids[*]} | sed -e 's/ / -p /g;s/^/-p /') +        echo "pid_args: $pid_args" + +        pcpu=( $(ps $pid_args -o pcpu -h ) ) +        echo "pcpu: ${pcpu[*]}" + +        wait_longer=false + +        for i in $( seq 0 $((${#pcpu[*]} - 1)) ) +        do +                echo "i: $i" +                echo "mypids[$i]: ${mypids[$i]}" + +                int_pcpu=$(echo ${pcpu[$i]} | cut -f 1 -d '.') +                echo "int_pcpu: $int_pcpu" +                if [ ! $int_pcpu ] || [ ! $min_watch_cpu ]; then +                        break=true +                        echo "breaking" +                fi +                if [ $int_pcpu -ge $min_watch_cpu ]; then +                        wait_longer=true +                        mydirname="${brick_process_name}-${mypids[$i]}-$(date --utc +'%Y%m%d-%H%M%S.%N')" +                        $(mkdir $mydirname && cd $mydirname && timeout --kill-after=5 --signal=KILL 60 nice -n -19 strace -p ${mypids[$i]} -ff -tt -T -o $brick_process_name) & +                fi +        done + +        if $wait_longer; then +                sleep 90 +        else +                sleep 15 +        fi +done  | 
