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