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