Infinite Looping code and jstack

Scott Oaks Scott.Oaks at Sun.COM
Thu Mar 20 10:34:08 PDT 2008


I am on S10 (S10 U3), but I've never had much luck with pstack and busy
java processes (and/or perhaps large -- the appserver has a few hundred
threads and a 3GB heap) -- pstack itself seems to loop infinitely, or
perhaps I'm just never patient enough...but after an hour or two, I
still never have output.

I'll try the gcore trick.

-Scott

On Thu, 2008-03-20 at 13:27, Tom Rodriguez wrote:
> I believe that jstack may induce a safepoint in the target VM so the 
> stack trace will always occur at safepoints in the code.  This might 
> cause the trace to tend to point at a particular locations.  A trick 
> that might work is to gcore the process and use jstack on that.  That 
> assumes your cores aren't huge though.
> 
> If you are on s10 or later, pstack on s10 will decode Java stack traces 
> though there are sometimes issues with getting full traces.  It's pretty 
> good at the top of the stack though which is where you're interested. 
> What platform are you on?
> 
> tom
> 
> Scott Oaks wrote:
> > We have an appserver installation where some set of threads get into an
> > infinite loop. jstack always reports that the threads in question are at
> > a specific line.
> > 
> > Here's a snippet of the jstack output:
> > "http80-Processor584" daemon prio=10 tid=0x015af400 nid=0x8d4 runnable
> > [0x26bdf000..0x26bdf9f0]
> >    java.lang.Thread.State: RUNNABLE
> >         at
> > org.apache.coyote.http11.InternalInputBuffer.parseHeader(InternalInputBuffer.java:805)
> >         at
> > org.apache.coyote.http11.InternalInputBuffer.parseHeaders(InternalInputBuffer.java:607)
> >         at
> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:667)
> > 
> > parseHeader (line 805) isn't really a loop at all; there's no way I can
> > account for the infinite loop being in that method. It's conceivable
> > somehow that parseHeaders (line 607) could be in a loop:
> > 
> >     while (parseHeader())
> >           doSomething
> > 
> > But in that case, wouldn't I get somewhat differing results from
> > successive invocations jstack (or even one jstack where multiple threads
> > are in the same method)? 
> > 
> > I guess what I'm really asking is what the granularity of jstack is --
> > if I were in an infinite loop over two methods and 40-50 lines of code,
> > is it really conceivable that jstack would always show me I was on the
> > very same line (because that line corresponds to a safepoint or
> > something)? Or is something else more likely going on?
> > 
> > This is with JDK 1.6.0_02 and the server compiler.
> > 
> > -Scott
> > 




More information about the hotspot-dev mailing list