問題描述
一天前,經過幾個月的正常工作,我們的java應用程序開始偶爾崩潰并出現以下錯誤:
One day ago, after a few months of normal working, our java app starts to crash occasionally with the following error:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (safepoint.cpp:247), pid=2075, tid=140042095163136
# guarantee(PageArmed == 0) failed: invariant
#
# JRE version: 6.0_23-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.0-b09 mixed mode linux-amd64 compressed oops)
# An error report file with more information is saved as:
# /var/chat/jSocketer/build/hs_err_pid2075.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
我查看了 hs_err_pid2075.log 并看到有一個活動線程,它處理網絡通信.但是,在過去的幾個月里沒有進行任何應用程序或環境更改.也沒有任何負載增長.我該怎么做才能理解,崩潰的原因是什么?是否有任何常見的步驟來調查 jvm 崩潰?
I looked in hs_err_pid2075.log and saw that there was an active thread, that processed a network communication. However there wasn't any application or environment changes done in the last few months. Also there wasn't any load growth. What can I do to understand, what is the reason of crash? Are there any common steps to investigate a jvm crash?
UPDhttp://www.wuala.com/ubear/public
推薦答案
崩潰是在 JVM 中,而不是在外部原生代碼中.但是,它崩潰的操作是由外部 DLL 發起的.
The crash is in the JVM, not in external native code. However, the operation it crashed on has been initiated by and external DLL.
hs_err_pid 文件中的這一行解釋了崩潰的操作:
This line in the hs_err_pid file explains the operation that crashed:
VM_Operation (0x00007f5e16e35450): GetAllStackTraces, mode: safepoint, requested by thread 0x0000000040796000
現在,線程 0x0000000040796000 是
Now, thread 0x0000000040796000 is
0x0000000040796000 JavaThread "YJPAgent-Telemetry" daemon [_thread_blocked, id=2115, stack(0x00007f5e16d36000,0x00007f5e16e37000)]
這是 Yourkit 創建的一個線程.GetAllStackTraces"是分析器需要調用才能進行采樣的東西.如果您刪除分析器,則不會發生崩潰.
which is a thread created by Yourkit. "GetAllStackTraces" is something that a profiler needs to call in order to do sampling. If you remove the profiler, the crash will not happen.
有了這些信息,無法說出導致崩潰的原因,但您可以嘗試以下操作:刪除所有 -XX VM 參數、-verbose:gc 和調試 VM 參數.它們可能會干擾 JVM 的分析接口.
With this information It's not possible to say what causes the crash, but you can try the following: Remove all -XX VM parameters, -verbose:gc and the debugging VM parameters. They might interfere with the profiling interface of the JVM.
更新
調用 java.lang.Thread#getAllStackTraces()
或 java.lang.Thread#getStackTrace()
的代碼可能會觸發相同的崩潰
Code that calls java.lang.Thread#getAllStackTraces()
or java.lang.Thread#getStackTrace()
may trigger the same crash
這篇關于如何調查 JVM 崩潰的原因?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!