[Zope-dev] Zope Server hanging :-(

Chris Muldrow muldrow@mac.com
Wed, 02 May 2001 17:16:24 +0000


I'll vouch for the effectiveness of this method in tracking down some
problems. Chris' advice helped us track down some horrendous numbers around
a method calling DateTime. We've seen some definite improvements since we
reworked the way we're doing that function. It raises a question,
though--anyone else having weird performance issues using DateTime range
searches against DateTime values stored in the Catalog? We went from
checking a DateTime range to checking dates against an integer value, and
it's been working well.

> From: "Chris McDonough" <chrism@digicool.com>
> Date: Wed, 2 May 2001 12:08:19 -0400
> To: "Tim McLaughlin" <tim@BCSWebservices.net>, "Chris Withers"
> <chrisw@nipltd.com>
> Cc: "Tim McLaughlin" <tim@BCSWebservices.net>, <zope-dev@zope.org>
> Subject: Re: [Zope-dev] Zope Server hanging :-(
> 
> The docs (available via the --help switch) go into some of this detail, but
> I agree that a narrative explaining how to approach it from a functional
> perspective would be a good thing.
> 
> 
> ----- Original Message -----
> From: "Tim McLaughlin" <tim@BCSWebservices.net>
> To: "'Chris McDonough'" <chrism@digicool.com>; "Chris Withers"
> <chrisw@nipltd.com>
> Cc: "Tim McLaughlin" <tim@BCSWebservices.net>; <zope-dev@zope.org>
> Sent: Wednesday, May 02, 2001 12:05 PM
> Subject: RE: [Zope-dev] Zope Server hanging :-(
> 
> 
>> Nice info.  This could be useful for many, many things.  you oughtta put
>> this in a how-to (if you haven't already).  thanks Chris.
>> 
>> I'll use it if we have any more issues.  Currently, as I told ChrisW, the
>> issues have stopped. But I'm still keeping my eye on it.
>> 
>> -----Original Message-----
>> From: Chris McDonough [mailto:chrism@digicool.com]
>> Sent: Wednesday, May 02, 2001 12:00 PM
>> To: Chris Withers
>> Cc: Tim McLaughlin; zope-dev@zope.org
>> Subject: Re: [Zope-dev] Zope Server hanging :-(
>> 
>> 
>> One of the more important bits is the "active" count when using
>> the --detailed option to requestprofiler.  This tells you how many *other*
>> requests were "unfinished" at the end of a particular request.
>> 
>> So for instance, if you run requestprofiler like this:
>> 
>> python requestprofiler.py log.file.name --detailed
>> 
>> And you see a profile line like (header added for reference):
>> 
>> start                win wout wend tot S   osize  code act url
>> 2001-04-19T01:19:42    0   12    0  12 E   26024  200    5
>> /Catalog/checkrep?P
>> 
>> This means that:
>> 
>> - this request started at 2001-04-19 1:19:42 UTC ("start")
>> 
>> - zserver waited 0 secs for input from the client ("win")
>> 
>> - zserver waited 12 secs for output from the publisher ("wend")
>> 
>> - the total time from start to end for the request was 12 secs ("tot")
>> 
>> - the request reached the end ("E") stage ("S", one of "E", "A", "I",
> "B")
>> 
>> - the output size in bytes was 26024 ("osize")
>> 
>> - the http code was 200 ("code")
>> 
>> - the number of pending requests at the end of this request was 5
>> ("active")
>> 
>> - the URL of the request ("url")
>> 
>> Hangs are also interesting.
>> 
>> Use detailed reporting to sort by end stage:
>> 
>> requestprofiler.py your.log.file --detailed --sort=endstage
>> 
>> Any requests that don't show a stage of "E" for their endstage were "hung"
>> requests.
>> 
>> You can also use cumulative reporting to sort by "hangs":
>> 
>> requestprofiler.py your.log.file --cumulative --sort=hangs
>> 
>> This will show the methods that "hung" most frequently.  Much of the time,
>> you can find problems this way by seeing methods that enter an infinte
> loop
>> or cause a segfault.
>> 
>> Total time is also interesting:
>> 
>> requestprofiler.py your.log.file --detailed --sort=total
>> 
>> Shows you individual calls to methods that took a long time.
>> 
>> - AND -
>> 
>> requestprofiler.py your.log.file --cumulative --sort=total
>> 
>> Shows you where most of the request time is spent.
>> 
>> The goal is to indentify methods or requests that take a long time, don't
>> return, or are accessed frequently.  If you can match this data up with
>> specific problems you've experienced (possibly by way of times/dates), it
>> becomes easier to form postulations about what is happening to Zope under
>> load.  Then investigate those postulations by refactoring code or by doing
>> more detailed logging in the places where you think the problems are.
>> 
>> - C
>> 
>> 
>> 
>> 
>> 
>>> Hmmm, not really sure what I should be looking for :-S
>>> 
>>> What ways should I look to run it and what should I do with the output?
>>> 
>>> cheers,
>>> 
>>> Chris
>>> 
>> 
> 
> 
> _______________________________________________
> Zope-Dev maillist  -  Zope-Dev@zope.org
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - 
> http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope )