github.com/swiftstack/proxyfs@v0.0.0-20201223034610-5434d919416e/bin/proxyfsd-getprofile (about) 1 #!/usr/bin/bash 2 # 3 # Collect periodic heap profiles from proxyfsd using the 4 # HTTP interface. This requies that proxyfsd be compiled with the 5 # patch included below. 6 # 7 CMDNAME=`basename $0` 8 HEAP_PROFILE_URL="http://localhost:6060/debug/pprof/heap" 9 HEAP_PROFILE_SEC=180 10 11 12 # patch for proxyfsd/daemon.go 13 # 14 cat <<!EOT > /dev/null 15 a/proxyfsd/daemon.go b/proxyfsd/daemon.go 16 index 656412a..8c441b7 100644 17 --- a/proxyfsd/daemon.go 18 +++ b/proxyfsd/daemon.go 19 @@ -2,6 +2,8 @@ package proxyfsd 20 21 import ( 22 "fmt" 23 + "net/http" 24 + _ "net/http/pprof" 25 "os" 26 "os/signal" 27 "sync" 28 @@ -246,6 +248,11 @@ func Daemon(confFile string, confStrings []string, signalHandlerIsArmed *bool, e 29 wg.Done() 30 }() 31 32 + go func() { 33 + logger.Infof("proxyfsd.Daemon() starting debug HTTP server: %s", 34 + http.ListenAndServe("localhost:6060", nil)) 35 + }() 36 + 37 // Arm signal handler used to indicate termination and wait on it 38 // 39 // Note: signalled chan must be buffered to avoid race with window between 40 !EOT 41 42 function usage { 43 echo "${CMDNAME} <dirname>" 1>&2 44 exit 2 45 } 46 47 function timestamp { 48 /bin/date +%Y-%m-%d_%H%M.%S 49 } 50 51 dirname="$1" 52 if [ ! -d "$dirname" ]; then 53 echo "${CMDNAME}: target directory '${dirname}' does not exist" 1>&2 54 usage 55 fi 56 57 wget --no-verbose -O /dev/null ${HEAP_PROFILE_URL} > /dev/null 58 if [ $? != 0 ]; then 59 echo "${CMDNAME}: proxyfsd http server at '${HEAP_PROFILE_URL}' did not respond. Is the patch applied?" 1>&2 60 usage 61 fi 62 63 proxyfsd_loc="/opt/ss/bin/proxyfsd /usr/bin/proxyfsd" 64 proxyfsd_bin="" 65 for fl in $proxyfsd_loc; do 66 if [ -f "$fl" -a -x "$fl" ]; then 67 proxyfsd_bin="$fl" 68 break 69 fi 70 done 71 if [ -z "$proxyfsd_bin" ]; then 72 echo "${CMDNAME}: can not find proxyfsd executable" 1>&2 73 usage 74 fi 75 76 cp $proxyfsd_bin "$dirname/proxyfsd-`timestamp`" 77 if [ $? != 0 ]; then 78 echo "${CMDNAME}: copy of '$proxyfsd_bin' to $dirname failed" 79 usage 80 fi 81 82 while true; do 83 84 outfl="${dirname}/heap-`timestamp`.prof" 85 wget --no-verbose -O $outfl $HEAP_PROFILE_URL 86 # echo "collected $outfl" 87 88 sleep $HEAP_PROFILE_SEC 89 if [ $? != 0 ]; then 90 echo "$CMDNAME: sleep exited with rc $?; exiting" 91 break 92 fi 93 done