我们有一个生产java进程,今天死机了。我们做了一些系统检查,比如磁盘空间检查,内存争用等。我们猜到进程死锁了,所以在跳过进程之前,我们在pid上运行了pstack命令。我无法从输出中解释太多。如何阅读这些日志?我在谷歌上搜索了pstack和相关帮助,但没有获得太多信息。
这是堆栈跟踪的顶部。看起来我们是在等待一个条件?从JNI线程调用DestroyVM是危险的吗?
Thread 87 (Thread 0x406a3940 (LWP 18762)):
#0 0x000000325d60a899 in pthread_cond_wait@@GLIBC_2.3.2 ()
#1 0x00002b6f8fd9177e in os::PlatformEvent::park ()
#2 0x00002b6f8fd67595 in Monitor::IWait ()
#3 0x00002b6f8fd67bfd in Monitor::wait ()
#4 0x00002b6f8fea0295 in Threads::destroy_vm ()
#5 0x00002b6f8fba6eab in jni_DestroyJavaVM ()
#6 0x000000004000223f in JavaMain ()
#7 0x000000325d606367 in start_thread () from /lib64/libpthread.so.0
#8 0x000000325cad30ad in clone () from /lib64/libc.so.6 如有任何建议或帮助,我们将非常感谢。谢谢!
发布于 2011-09-24 02:30:51
您在这里看到的堆栈来自jvm本身,而不是您的java进程。别忘了Java是一种虚拟器,程序的字节码指令是由JVM解释和执行的,它只不过是一个C(当然是C++)程序。
所以我猜你没有多少信息可以从这个堆栈中提取出来,你应该已经连接了一个java调试器(jdb ?)到您的JVM,如果允许的话,以获得有意义的回溯。
https://stackoverflow.com/questions/6132559
复制相似问题