how to bring jvm to safepoint

Tom Rodriguez tom.rodriguez at oracle.com
Fri Jul 30 12:01:34 PDT 2010


Actually I think the problem is that the thread is in thread_in_Java state. I don't believe you can safepoint from that state, only thread_in_vm. 

tom

On Jul 30, 2010, at 12:04 AM, David Holmes <David.Holmes at oracle.com> wrote:

> Sorry Tony I keep forgetting that I don't have a way to decode a crash log from a VM that you built yourself. :( However you may be able to decode it yourself please see:
> 
> http://blogs.sun.com/dave/entry/a_tool_to_decode_hs
> 
> for a perl script.
> 
> That said looking at the actual assertion failure I am guessing that you initiated the VM operation from code where a No_Safepoint_verifier is active.
> 
> David
> 
> Tony Guan said the following on 07/30/10 15:58:
>> Hi David,
>> Thanks a lot!
>> I am copying the content to below, and for convenience, the full log
>> file is attached.
>> cat hs_err_pid30894.log
>> #
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  Internal Error
>> (/home/tony/software/OpenJDK/jdk7/hotspot/src/share/vm/runtime/thread.cpp:777),
>> pid=30894, tid=1082374480
>> #  Error: Possible safepoint reached by thread that does not allow it
>> #
>> # JRE version: 7.0
>> # Java VM: OpenJDK 64-Bit Server VM (17.0-b07291505-internal-debug
>> mixed mode linux-amd64 )
>> # If you would like to submit a bug report, please visit:
>> #   http://java.sun.com/webapps/bugreport/crash.jsp
>> #
>> ---------------  T H R E A D  ---------------
>> Current thread (0x00000000012ed000):  JavaThread "RMI TCP
>> Connection(idle)" daemon [_thread_in_Java, id=30929,
>> stack(0x000000004073b000,0x000000004083c000)]
>> Stack: [0x000000004073b000,0x000000004083c000],
>> sp=0x0000000040839d60,  free space=3fb0000000000000000k
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
>> V  [libjvm.so+0x8cad18]
>> V  [libjvm.so+0x8cbe38]
>> V  [libjvm.so+0x4039f1]
>> V  [libjvm.so+0x87a183]
>> V  [libjvm.so+0x8e1127]
>> V  [libjvm.so+0x4d52ab]
>> V  [libjvm.so+0x7ee63d]
>> j  sun.misc.Unsafe.park(ZJ)V+0
>> j  java.util.concurrent.locks.LockSupport.parkNanos(Ljava/lang/Object;J)V+20
>> j  java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;ZJ)Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;+174
>> j  java.util.concurrent.SynchronousQueue$TransferStack.transfer(Ljava/lang/Object;ZJ)Ljava/lang/Object;+102
>> j  java.util.concurrent.SynchronousQueue.poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;+11
>> j  java.util.concurrent.ThreadPoolExecutor.getTask()Ljava/lang/Runnable;+141
>> j  java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+17
>> j  java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5
>> j  java.lang.Thread.run()V+11
>> v  ~StubRoutines::call_stub
>> V  [libjvm.so+0x555ecc]
>> V  [libjvm.so+0x747a34]
>> V  [libjvm.so+0x554b55]
>> V  [libjvm.so+0x5551f0]
>> V  [libjvm.so+0x5553cc]
>> V  [libjvm.so+0x5be6cd]
>> V  [libjvm.so+0x879869]
>> V  [libjvm.so+0x87c1b5]
>> V  [libjvm.so+0x750455]
>> ....
>> (above is the stack, please see the attachment for more information)
>> Tony (Xiaohua Guan)
>> On Thu, Jul 29, 2010 at 8:07 PM, David Holmes <David.Holmes at oracle.com> wrote:
>>> Tony,
>>> 
>>> I don't see anything obviously wrong with what you attempted. Can you show
>>> the full stack dump from the error.
>>> 
>>> David Holmes
>>> 
>>> Tony Guan said the following on 07/30/10 07:29:
>>>> Dear all,
>>>> 
>>>> I want to invoke the GC at a certain time, for example, when a certain
>>>> method is called at runtime, so I created a new subtype of
>>>> VM_GC_Operation class, and initialized it with an object op, finally,
>>>> executed using:VMThread::execute(&op)
>>>> 
>>>> then I got the following error message:
>>>> 
>>>> #  Internal Error
>>>> 
>>>> (/home/tony/software/OpenJDK/jdk7/hotspot/src/share/vm/runtime/thread.cpp:777),
>>>> pid=29652, tid=1096460624
>>>> #  Error: Possible safepoint reached by thread that does not allow it
>>>> 
>>>> The reason for the fail is that
>>>> Thread::check_for_valid_safepoint_state() didn't pass because the
>>>> currentThread is not a VMThread.
>>>> 
>>>> My question is: how do I bring the current thread to a safepoint? or
>>>> how do I call a GC operation properly? is there any prerequisite for
>>>> doing so?
>>>> 
>>>> Thanks!
>>>> 
>>>> Tony (Xiaohua Guan)
>>> 


More information about the hotspot-runtime-dev mailing list