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.