I'm trying to run Call Graph profiling on a Tomcat application. I can run it fine on a simple test application. When I run under Tomcat, it core dumps early on during initialisation. Occasionally I get some basic Call Graph out of it, other times I don't, presumably depending on how badly it crashes.
I'm using the 9.1 VTune on Windows, talking to a 9.1 RDC on RedHat system running kernel 2.6.18-92.1.10.el5PAE, using the VDK driver from the 3.1.003 PTU.
Below is a sample crash. Any suggestions?
# An unexpected error has been detected by Java Runtime Environment:
# SIGSEGV (0xb) at pc=0x082e5aab, pid=11721, tid=971484048
# Java VM: Java HotSpot Server VM (10.0-b23 mixed mode linux-x86)
# Problematic frame:
# C 0x082e5aab
# If you would like to submit a bug report, please visit:
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
--------------- T H R E A D ---------------
Current thread (0x3864ac00): JavaThread "NioBlockingSelector.BlockPoller-1" daemon [_thread_in_native, id=11824, stack(0x39e2a000,0x39e7b000)]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000000
EAX=0x19fa48f6, EBX=0xb7ee10b0, ECX=0x00000000, EDX=0x082faa08
ESP=0x39e79bf4, EBP=0x42174610, ESI=0x082fa868, EDI=0x082e6930
EIP=0x082e5aab, CR2=0x00000000, EFLAGS=0x00210202
Top of Stack: (sp=0x39e79bf4)
0x39e79bf4: b7eb771d 082fa840 39e79c38 0000003a
0x39e79c04: b7eb76e6 00002000 000003e8 00000000
0x39e79c14: b7ee2bb0 082e0560 3864ac00 39e79c70
0x39e79c24: b7ebad84 082e6930 39e79c38 3864acf4
0x39e79c34: b7ebac5d 00013a27 00000000 00002000
0x39e79c44: 000003e8 00000000 0000003a 00000000
0x39e79c54: 00000000 00000008 39e79c5c 00000000
0x39e79c64: 39e79ca4 a380c5d0 39e79c8c 39e79c98
0x082e5a9b: 08 d0 0c 2e 08 e0 fc 2d 08 60 35 ee b7 10 03 2e
0x082e5aab: 08 21 00 00 00 60 d0 ee b7 00 00 00 00 00 00 00
Stack: [0x39e2a000,0x39e7b000], sp=0x39e79bf4, free space=318k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
v ~BufferBlob::StubRoutines (1)
I think that you profile Tomcat application which will call java application. However that is different to call simple java application directly since VTune Performance Analyzer add some special arguments to enable performance tuning, like as "-Xrunjavaperf". You might not transfer the paramenter to java application from Tomcat, I think.
Wouldn't that show up as two separate Java processes, though? One for Tomcat, one for something else. There's only one Java process, so I don't think it can be that, and I do get call graph profiling out of Tomcat for a little while so I know the arguments are being passed.
Any other ideas?
Speculatively, I set:
I then get a log file in /tmp, which has this at the end:
Error 12/19/08 11:22:32 3867 0 CDataManager File: DataManager.cpp (Line: 1602) condition failed: uiJVMPIMethodIndex < uiJVMPINumMethods
This therefore looks like an error in libJPI.so.
I then tried getting the latest libJPI.so from the profiler SDK at http://www.eclipse.org/tptp/home/downloads/, but this doesn't recognise the cg parameter. So perhaps VTune's libJPI.so is customised?
Does this ring any bells for anyone?