In writing to a file option, we would periodically write the file as it might turn out to be a huge file for the entire life of the pod to flush at once.
On Fri, Sep 11, 2020 at 6:32 PM Siddhesh Divekar <siddhesh.dive...@gmail.com> wrote: > You need to write to a shared writable path that is global so when the pod >> terminated the file is avail. > > That's a good idea, we can write to to a config map. > > The http should work too if you map the ports properly. You can be able to >> access the port from outside the pod. > > This might not work. When the issue happened last time, prometheus was > unable to pull any metrics from the pod. > For the entire period prometheus output was blank which told us that the > pod was non-responsive. > > On Fri, Sep 11, 2020 at 5:59 PM Robert Engels <reng...@ix.netcom.com> > wrote: > >> You need to write to a shared writable path that is global so when the >> pod terminated the file is avail. >> >> The http should work too if you map the ports properly. You can be able >> to access the port from outside the pod. >> >> On Sep 11, 2020, at 7:14 PM, Siddhesh Divekar <siddhesh.dive...@gmail.com> >> wrote: >> >> >> I went through the suggested approaches and here are my thoughts. >> >> - runtime/trace.Start - The example in the doc >> https://golang.org/pkg/runtime/trace/ suggests adding >> os.Create("trace.out"), trace.Start & >> defer trace.Stop in the main before the application program gets started. >> In an environment like k8s if the executing program is the pod main >> program then the pod will terminate and the trace.out will be lost. >> >> - net/http/pprof package - This has the same problem where requests might >> not make to the http server. >> >> - go test -trace - Works with only tests >> >> Any thoughts/ideas of what we can do to get a trace file avoiding above >> issues ? >> >> On Fri, Sep 11, 2020 at 12:06 PM Robert Engels <reng...@ix.netcom.com> >> wrote: >> >>> Please read golang.org/cmd/trace >>> >>> You need a trace file. There are many ways to capture one. >>> >>> On Sep 11, 2020, at 12:09 PM, Siddhesh Divekar < >>> siddhesh.dive...@gmail.com> wrote: >>> >>> >>> Ok, let me get them working first. >>> >>> My concern with pprof is it has to be made part of my process. >>> We had an issue where user requests were not reaching our http server >>> itself. >>> >>> In this case what are my options if pprof server is not reachable when >>> we hit the same issue again. >>> Are there any other tools which can be run independently? >>> >>> On Fri, Sep 11, 2020 at 5:20 AM Robert Engels <reng...@ix.netcom.com> >>> wrote: >>> >>>> I would start with making sure you can get the standard ‘go tool trace’ >>>> and ‘pprof’ working. Once you have those working ‘goanalyzer’ is an >>>> enhanced version. >>>> >>>> The docs are far more complete and substantial on the standard tools. >>>> >>>> On Sep 11, 2020, at 1:37 AM, Siddhesh Divekar < >>>> siddhesh.dive...@gmail.com> wrote: >>>> >>>> >>>> Is there any dependency on GOPATH while running `./goanalyzer binary >>>> trace-file` ? >>>> Also my goanalyzer is built on mac and am trying to look at trace file >>>> generated on ubuntu (shouldn't be a problem). >>>> >>>> ./goanalyzer ~/workspace/binary ~/workspace/trace >>>> 2020/09/10 23:27:32 Parsing trace... >>>> 2020/09/10 23:27:32 Splitting trace... >>>> 2020/09/10 23:27:32 Opening browser. Trace viewer is listening on >>>> http://127.0.0.1:55520 >>>> >>>> If I try to go to a particular go routing eg >>>> http://127.0.0.1:55520/trace?goid=9084 I see nothing on the browser. >>>> >>>> Clicking on any of the graphs for a goroutine says the following. >>>> >>>> failed to execute go tool pprof: exit status 1 >>>> failed to execute dot. Is Graphviz installed? Error: exec: "dot": >>>> executable file not found in $PATH >>>> >>>> >>>> On Thu, Sep 10, 2020 at 4:49 PM robert engels <reng...@ix.netcom.com> >>>> wrote: >>>> >>>>> goanalyzer = go tool trace >>>>> >>>>> The options to goanalyzer are the same as ‘go tool trace’ - the usage >>>>> message is misleading in this way. >>>>> >>>>> By ‘map’ I mean expose the pprof port as you would any other port, and >>>>> yes you use the net/http/pprof to start the internal webserver - you don’t >>>>> need to create your own. >>>>> >>>>> >>>>> >>>>> On Sep 10, 2020, at 6:38 PM, Siddhesh Divekar < >>>>> siddhesh.dive...@gmail.com> wrote: >>>>> >>>>> Hi Robert, >>>>> >>>>> Laying down the steps to make sure I understood it correctly. >>>>> >>>>> You can map the port >>>>>> >>>>> What did you mean by above ? >>>>> >>>>> but might be easier to capture to a file via code and use goanalyzer >>>>>> on the file >>>>>> >>>>> In this case I will do the following. >>>>> a) Set up a webserver in my program for getting Go profiles (with >>>>> import _ "net/http/pprof") >>>>> b) map a port from outside k8s so that i can run curl >>>>> localhost:$PORT/debug/pprof/$PROFILE_TYPE to save a profile (say >>>>> profile-file) >>>>> c) Use go tool pprof/goanalyzer to analyze given profile from the >>>>> profile-file >>>>> >>>>> I would prefer to run this outside my process as the issue we expect >>>>> to happen is when my program is hung. >>>>> I am not sure if the http server would respond & generate profile >>>>> files. >>>>> >>>>> From the help of goanalyzer it's not very clear how I would pass the >>>>> profile-file to it. >>>>> It's showing how to generate profile-file using go test/tool but not >>>>> how to pass them to goanalyzer. >>>>> >>>>> # ./goanalyzer -h >>>>> Usage of 'go tool trace': >>>>> Given a trace file produced by 'go test': >>>>> go test -trace=trace.out pkg >>>>> >>>>> Open a web browser displaying trace: >>>>> go tool trace [flags] [pkg.test] trace.out >>>>> >>>>> Generate a pprof-like profile from the trace: >>>>> go tool trace -pprof=TYPE [pkg.test] trace.out >>>>> >>>>> [pkg.test] argument is required for traces produced by Go 1.6 and >>>>> below. >>>>> Go 1.7 does not require the binary argument. >>>>> >>>>> Supported profile types are: >>>>> - net: network blocking profile >>>>> - sync: synchronization blocking profile >>>>> - syscall: syscall blocking profile >>>>> - sched: scheduler latency profile >>>>> >>>>> Flags: >>>>> -http=addr: HTTP service address (e.g., ':6060') >>>>> -pprof=type: print a pprof-like profile instead >>>>> -d: print debug info such as parsed events >>>>> >>>>> >>>>> On Thu, Sep 10, 2020 at 3:22 PM Robert Engels <reng...@ix.netcom.com> >>>>> wrote: >>>>> >>>>>> You can map the port but might be easier to capture to a file via >>>>>> code and use goanalyzer on the file. >>>>>> >>>>>> On Sep 10, 2020, at 4:53 PM, Siddhesh Divekar < >>>>>> siddhesh.dive...@gmail.com> wrote: >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> Has anyone tried running goanalyzer on golang process running inside >>>>>> k8s pod. >>>>>> >>>>>> If so can you point me to the steps. >>>>>> >>>>>> -- >>>>>> -Siddhesh. >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "golang-nuts" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to golang-nuts+unsubscr...@googlegroups.com. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/golang-nuts/CAMjfk%2BhUDqMRmE0mDp_gMTKWKT0Be8KgtBxuF2fYAGCs-dNoog%40mail.gmail.com >>>>>> <https://groups.google.com/d/msgid/golang-nuts/CAMjfk%2BhUDqMRmE0mDp_gMTKWKT0Be8KgtBxuF2fYAGCs-dNoog%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -Siddhesh. >>>>> >>>>> >>>>> >>>> >>>> -- >>>> -Siddhesh. >>>> >>>> >>> >>> -- >>> -Siddhesh. >>> >>> >> >> -- >> -Siddhesh. >> >> > > -- > -Siddhesh. > -- -Siddhesh. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAMjfk%2BivMe9ZM53nVo5Pnfp-6Kdb1p_%3DPfhX_c5JTTy9wi%3DsdQ%40mail.gmail.com.