Hi, Robert,

The request *should* be super short, but it was actually taking 2.5
seconds.  That was the whole reason I started trying to profile it, to
figure out why a simple request was taking so long.

Ian's suggestion of heap tracing found the issue for me:  there was an
unexpected allocation of a 13MB block in there.  Tracing that, I found the
root cause, which was corrupted data in my site database.  Many thanks to
all for the help.

Regards,
Steve


On Wed, Jan 12, 2022 at 4:20 PM robert engels <reng...@ix.netcom.com> wrote:

> Are you certain that the requests aren’t super short - so all you are
> measuring is the runtime startup time / and the overhead of parsing the CGI
> “protocol". This is not insignificant. CGI really only works well for long
> requests IMO.
>
> On Jan 12, 2022, at 5:29 PM, Steve Roth <st...@rothskeller.net> wrote:
>
> Thank you, Ian.  From the function names, I suspected that the 70% chain
> was the garbage collector.  But in this run, garbage collection was turned
> off with GOGC=off, and that was verified with GODEBUG=gctrace=1.  So I
> thought perhaps they must be something else.
>
> I will proceed with heap profiling as you suggest.  (And of course I've
> reviewed pprof blog post many times.)
>
> Regards,
> Steve
>
>
> On Wed, Jan 12, 2022 at 2:58 PM Ian Lance Taylor <i...@golang.org> wrote:
>
>> On Wed, Jan 12, 2022 at 1:54 PM Steve Roth <st...@rothskeller.net> wrote:
>> >
>> > I am attempting to profile my code, and I'm unable to interpret the
>> results.  So first, the meta-question is, what's the best forum to use to
>> request help with such things?
>>
>> This is a good place.  See also https://golang.org/wiki/Questions.
>>
>>
>> > The chain that is taking 70% of the time is
>> >
>> > gcBgMarkWorker
>> >
>> > systemstack
>> >
>> > gcBgMarkWorker.func2
>> >
>> > gcDrain
>> >
>> > markroot
>> >
>> > markroot.func1
>> >
>> > suspendG
>>
>> This is the concurrent garbage collector.
>>
>>
>> > The chain that is taking 17% of the time is
>> >
>> > mcall
>> >
>> > park_m
>> >
>> > schedule
>> >
>> > findrunnable
>> >
>> > stopm
>> >
>> > mPark
>> >
>> > notesleep
>> >
>> > futexsleep
>> >
>> > futex
>> >
>> > Again I have no clue what this is doing.  Any guidance is welcome,
>> including pointers to other forums better suited for such questions.
>>
>> This is the goroutine scheduler.
>>
>> If your program is CPU bound (as it should be based on your
>> description) then 70% in the garbage collector is a lot.  The next
>> step is to collect a heap profile to see where the memory is being
>> allocated.  You may want to look at https://go.dev/blog/pprof, old but
>> still valid.
>>
>> Ian
>>
>
> --
> 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/CAAnpqKGzr4MNfnC4Tqam2NoOt9AJ4NKP_Hiarv5usaYQYG1iNw%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CAAnpqKGzr4MNfnC4Tqam2NoOt9AJ4NKP_Hiarv5usaYQYG1iNw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
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/CAAnpqKEG8Brwe1yHLdWzSX76rCCidybTR-PC4HBgWVKEi7CE7A%40mail.gmail.com.

Reply via email to