我如何解释pstack日志?

时间:2011-05-26 00:37:52

标签: java linux multithreading

我们今天有一个生产的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  

非常感谢任何指针/帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您在此处看到的堆栈来自jvm本身,而不是您的java进程。 不要忘记Java的JVM是一种虚拟化器,程序的字节码指令由JVM解释和执行,JVM只不过是一个C(C ++肯定)程序。

所以我猜你可以从这个堆栈中提取的信息不多,你应该将java调试器(jdb?)连接到你的JVM(如果允许的话),以获得有意义的回溯。