system profilers and incomplete stacks
David Holmes
david.holmes at oracle.com
Tue Jun 17 05:48:24 UTC 2014
Hi Brendan,
I'm not quite seeing the complete context here so a few queries:
1. Which platform are you running Dtrace on? (hotspot has to provide
helper d-scripts to allow Dtrace to walk Java stacks)
2. What are perf-events? How do they try to walk stacks?
3. Does "jstack -m" show full stacks for the apps where you see problem?
Thanks,
David
On 17/06/2014 10:14 AM, Brendan Gregg wrote:
> Thanks but no, I'm aware of that bug and workarounds (I'm using the
> LD_AUDIT_64=/usr/lib/dtrace/64/libdtrace_forceload.so workaround, which
> isn't mentioned in the bug comments, but probably should be). That bug
> is about missing symbols, but the stacks shown in that bug still go all
> the way to thread_start. My stacks often don't.
>
> For simple programs, the stacks are complete. But something complex (eg,
> vert.x with event loops), and the stacks are often incomplete, one frame
> only. Very much like what I see with -fomit-frame-pointer, although this
> is hotspot, not gcc. Such incomplete stacks are seen using either DTrace
> or perf_events.
>
> It was suggested to me to email the hotspot developers, because this may
> well be a hotspot optimization they are familiar with. It may also be
> something really obvious, like that the JVM breaks native stacks due to
> optimized frames / green threads / etc, and there is absolutely no way
> around it (no way to disable it). If that's true, it may also mean that
> the DTrace jstack() action has always had this issue. I'm still reading
> the source...
>
> Brendan
>
>
>
> On Mon, Jun 16, 2014 at 4:04 AM, Staffan Larsen
> <staffan.larsen at oracle.com <mailto:staffan.larsen at oracle.com>> wrote:
>
> I think this is the bug you are looking at:
> https://bugs.openjdk.java.net/browse/JDK-7187999, but I’ll defer to
> someone else to confirm.
>
> /Staffan
>
>
> On 16 jun 2014, at 12:47, Roland Westrelin
> <roland.westrelin at oracle.com <mailto:roland.westrelin at oracle.com>>
> wrote:
>
>> Forwarding to serviceability alias where this question belongs I
>> think.
>>
>> Begin forwarded message:
>>
>>> *From: *Brendan Gregg <brendan.d.gregg at gmail.com
>>> <mailto:brendan.d.gregg at gmail.com>>
>>> *Subject: **system profilers and incomplete stacks*
>>> *Date: *June 12, 2014 at 7:15:54 PM GMT+2
>>> *To: *hotspot-compiler-dev at openjdk.java.net
>>> <mailto:hotspot-compiler-dev at openjdk.java.net>
>>>
>>> G'Day,
>>>
>>> Is there a way to run hotspot so that a system profiler (eg,
>>> DTrace, or Linux perf_events) can measure complete stacks? I
>>> often get incomplete, partial stacks, with one or a few frames
>>> only. I'm not worried about symbols right now, what I'd like is
>>> to walk stacks all the way down to thread start.
>>>
>>> I've been browsing the hotspot code, but haven't found out how
>>> yet. I suspect it's related to Java optimized frames, and has
>>> ditched the frame pointer. I was looking for an equivalent
>>> -fno-omit-frame-pointer option.
>>>
>>> Here's an example:
>>>
>>> # dtrace -n 'profile-99 /execname == "java"/ { @[jstack(100,
>>> 8000)] = count(); }'
>>> [...]
>>> org/mozilla/javascript/
>>> ScriptableObject.createSlot(Ljava/lang/String;II)Lorg/mozilla/javascript/ScriptableObject$Slot;*
>>> 0x884acce8200002da
>>> 1
>>>
>>>
>>> sun/nio/ch/SocketChannelImpl.read(Ljava/nio/ByteBuffer;)I*
>>> 0xffffffff20007f4b
>>> 1
>>>
>>>
>>> org/mozilla/javascript/ScriptRuntime.newObjectLiteral([Ljava/lang/Object;[Ljava/lang/Object;[ILorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;)Lorg/mozilla/javascript/Scriptable;*
>>> 0xa20000041
>>> 1
>>> [...]
>>>
>>> I see similar incomplete stacks with Linux perf_events. Oracle
>>> JDKs from 6 to 8, and OpenJDK.
>>>
>>> thanks,
>>>
>>> Brendan
>>> --
>>> http://www.brendangregg.com <http://www.brendangregg.com/>
>>
>
>
>
>
> --
> http://www.brendangregg.com
More information about the serviceability-dev
mailing list