<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.