Great find! On Saturday, 2 December 2017 15:57:18 UTC+5:30, basti skalendudler wrote: > > > <https://lh3.googleusercontent.com/-vELZJKELDUs/WiJ_1zDqGUI/AAAAAAAABMo/U-3xe5_KqqwMwTRmYzBCjE7Nkr9Dfwk3wCLcBGAs/s1600/profile001.png> > I finally found the problem!!! > > Since I am using a custom mux, I needed to register the pprof handler > funcs to my custom router > > router.HandlerFunc(http.MethodGet, "/debug/pprof/", pprof.Index) > router.HandlerFunc(http.MethodGet, "/debug/pprof/cmdline", pprof.Cmdline) > router.HandlerFunc(http.MethodGet, "/debug/pprof/profile", pprof.Profile) > router.HandlerFunc(http.MethodGet, "/debug/pprof/symbol", pprof.Symbol) > router.HandlerFunc(http.MethodGet, "/debug/pprof/trace", pprof.Trace) > router.Handler(http.MethodGet, "/debug/pprof/goroutine", > pprof.Handler("goroutine")) > router.Handler(http.MethodGet, "/debug/pprof/heap", pprof.Handler("heap")) > router.Handler(http.MethodGet,"/debug/pprof/threadcreate", > pprof.Handler("threadcreate")) > router.Handler(http.MethodGet,"/debug/pprof/block", pprof.Handler("block")) > > Then, I started my benchmark (go-wrk) and then I started the pprof tool > (go tool pprof http://localhost:4000/debug/pprof/heap) > > > <https://lh3.googleusercontent.com/-vELZJKELDUs/WiJ_1zDqGUI/AAAAAAAABMo/U-3xe5_KqqwMwTRmYzBCjE7Nkr9Dfwk3wCLcBGAs/s1600/profile001.png> > After hitting "web", I was granted this wonderful graph: > > > > > > Am Freitag, 1. Dezember 2017 18:52:21 UTC+1 schrieb basti skalendudler: >> >> Specifically, I wanted to see heap allocations generated by incoming >> requests, so I can optimize my handler functions >> >> I will write a more basic webserver example to see if I can produce the >> result I am expecting >> >> Am Donnerstag, 30. November 2017 14:39:56 UTC+1 schrieb Karan Chaudhary: >>> >>> Attaching png: >>> >>> >>> <https://lh3.googleusercontent.com/-3pu5f0Zvebw/WiAKKFjnVnI/AAAAAAAAKG4/hnPspzQzf7ASbvqtTU64rEMPSsZ3G1bzgCLcBGAs/s1600/profile003.png> >>> >>> >>> On Thursday, 30 November 2017 19:09:04 UTC+5:30, Karan Chaudhary wrote: >>>> >>>> Are you just trying to see how heap allocation can be seen using >>>> debug/pprof? >>>> >>>> Maybe you're allocating too less. Try to allocate exponentialy. >>>> >>>> package main >>>> >>>> import ( >>>> "log" >>>> "net/http" >>>> "time" >>>> >>>> _ "net/http/pprof" >>>> ) >>>> >>>> func expalloc() { >>>> x := make([]int, 0) >>>> for i := 0; i < 10; i++ { >>>> x = append(x, i) >>>> x = append(x, x...) >>>> } >>>> >>>> time.Sleep(10 * time.Second) >>>> } >>>> >>>> func main() { >>>> go func() { >>>> log.Println(http.ListenAndServe("localhost:6060", nil)) >>>> }() >>>> >>>> expalloc() >>>> >>>> } >>>> >>>> Allocations on my machine (reduce 50 to smaller number as the program >>>> might go out of memory): >>>> >>>> >>>> <https://lh3.googleusercontent.com/-FqrfDyq6nRI/WiAJLLceTbI/AAAAAAAAKGw/AhU2-Tb-3dkJ9Wihr4iS7xynMq0r6sQCQCLcBGAs/s1600/profile003.png> >>>> >>>> >>>> >>>> >>>> On Wednesday, 29 November 2017 19:47:11 UTC+5:30, basti skalendudler >>>> wrote: >>>>> >>>>> Does noone have an idea? :( >>>>> >>>>> Am Montag, 27. November 2017 13:37:43 UTC+1 schrieb basti skalendudler: >>>>>> >>>>>> The go tool pprof command is interactive, so I thought it is enough >>>>>> type 'png' to get the image after the benchmark is run >>>>>> >>>>>> I tested to start go tool pprof now as well during and after the >>>>>> benchmark -> nothing changes >>>>>> >>>>>> Am Montag, 27. November 2017 04:37:48 UTC+1 schrieb Karan Chaudhary: >>>>>>> >>>>>>> From the top of my head, shouldn't the benchmark be done when >>>>>>> traffic is being sent to the server and not before it is sent? >>>>>>> >>>>>>> On Sunday, 26 November 2017 00:11:40 UTC+5:30, basti skalendudler >>>>>>> wrote: >>>>>>>> >>>>>>>> Hey guiys, I posted a StackOF question two days ago, but so far >>>>>>>> nobody was able to help me! >>>>>>>> >>>>>>>> I am trying to profile my web server I wrote, but my pprof does not >>>>>>>> contain any data about the handler func. >>>>>>>> I am using the httprouter package >>>>>>>> <https://github.com/julienschmidt/httprouter> by julienschmidt, >>>>>>>> and want to simply benchmark one of my handlers and see the pprof >>>>>>>> profile >>>>>>>> for that. For the benchmarking, I am using go-wrk >>>>>>>> <https://github.com/tsliwowicz/go-wrk> >>>>>>>> >>>>>>>> I set up my web server and pprof like this: >>>>>>>> >>>>>>>> >>>>>>>> // Configure the server >>>>>>>> server := &http.Server{ >>>>>>>> Addr: ":4000", >>>>>>>> Handler: router, >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> go func() { >>>>>>>> log.Println(http.ListenAndServe(":6060", nil)) >>>>>>>> }() >>>>>>>> >>>>>>>> >>>>>>>> // Start the server >>>>>>>> err = server.ListenAndServe() >>>>>>>> if err != nil { >>>>>>>> panic(err) >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> The router is initialized like this: >>>>>>>> >>>>>>>> >>>>>>>> // Create the httprouter >>>>>>>> router := httprouter.New() >>>>>>>> // Register all handlers >>>>>>>> router.GET("/entities/:type/map", h.UseHandler(&h. >>>>>>>> ApiGetEntitiesMapRequest{}, p)) >>>>>>>> >>>>>>>> >>>>>>>> And my handler looks like this: >>>>>>>> >>>>>>>> >>>>>>>> func (req ApiGetEntitiesMapRequest) Handle(r *http.Request, hrp >>>>>>>> httprouter.Params, p Params) (interface{}, error) { >>>>>>>> test := make([]string, 0) >>>>>>>> for i := 0; i < 1000; i++ { >>>>>>>> test = append(test, "1") >>>>>>>> test = append(test, "2") >>>>>>>> // Ensure pprof has some time to collect its data >>>>>>>> time.Sleep(10) >>>>>>>> } >>>>>>>> return test, nil >>>>>>>> } >>>>>>>> >>>>>>>> This handler is just a test, where I dynamically append a lot of >>>>>>>> elements to a slice. The reason for that is, I wanted to test whether >>>>>>>> these >>>>>>>> dynamic allocations are represented in the heap profile of pprof. >>>>>>>> >>>>>>>> Now, what I did was: >>>>>>>> >>>>>>>> - Start my server >>>>>>>> - execute **go tool pprof http://localhost:6060/debug/pprof/heap** >>>>>>>> in my terminal >>>>>>>> - then benchmark my handler by executing **go-wrk -no-c -d 5 >>>>>>>> http://localhost:4000/entities/object/map** >>>>>>>> >>>>>>>> The request works and my benchmark also reports everything >>>>>>>> correctly. However, when I type **png** in the pprof terminal, I get >>>>>>>> this >>>>>>>> graph: >>>>>>>> >>>>>>>> >>>>>>>> <https://lh3.googleusercontent.com/-H5BlDsvkGc8/WhkpNlbAgBI/AAAAAAAABMQ/MagwiySh4F8G5NvT4V4_uTAnHexw0VqBACLcBGAs/s1600/profile001.png> >>>>>>>> >>>>>>>> >>>>>>>> The graph does not contain any information about my handler and the >>>>>>>> costly heap allocations I did in my handler. What am I doing wrong? >>>>>>>> >>>>>>>
-- 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. For more options, visit https://groups.google.com/d/optout.