1

我有一个 java 应用程序,似乎卡住了。我尝试了 kill -3 但输出为空(它被重定向到文件但没有任何内容)。
我用什么方法可以看到它在做什么?

编辑:

我尝试了 jstack 但它崩溃了:

Linux # /usr/pkgs/java/1.6.0.25/bin/jstack -F -l 12666
Attaching to process ID 12666, please wait...

A fatal error has been detected by the Java Runtime Environment:

 SIGSEGV (0xb) at pc=0xaf121777, pid=5423, tid=2937191328

JRE version: 6.0_25-b06
Java VM: Java HotSpot(TM) Server VM (20.0-b11 mixed mode linux-x86 )
Problematic frame:
C  [libsaproc.so+0x1777]  void+0x1777
...

编辑2:

这是 jvisualvm 崩溃:

Linux # /usr/pkgs/java/1.6.0.25/bin/jvisualvm

A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0xf36d0777, pid=18217, tid=4090493856
JRE version: 6.0_25-b06
Java VM: Java HotSpot(TM) Client VM (20.0-b11 mixed mode, sharing linux-x86 )
Problematic frame:
C  [libsaproc.so+0x1777]  void+0x1777

An error report file with more information is saved as:
/tmp/root/feeder_wa/coho_idc/logs/hs_err_pid18217.log

If you would like to submit a bug report, please visit:
http://java.sun.com/webapps/bugreport/crash.jsp
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.

/usr/pkgs/java/1.6.0.25/bin/../lib/visualvm//platform/lib/nbexec:第 539 行:18217 中止“/usr/pkgs/java/1.6.0.25/bin/java”-Djdk .home="/usr/pkgs/java/1.6.0.25" -classpath "/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/boot.jar:/usr/pkgs/java/1.6. 0.25/lib/visualvm/platform/lib/org-openide-modules.jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/org-openide-util-lookup.jar:/usr/ pkgs/java/1.6.0.25/lib/visualvm/platform/lib/org-openide-util.jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/boot_ja.jar:/ usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/boot_zh_CN.jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/org-openide-modules_ja .jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/org-openide-modules_zh_CN.jar:/usr/pkgs/java/1.6.0。25/lib/visualvm/platform/lib/locale/org-openide-util-lookup_ja.jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/org-openide-util-lookup_zh_CN .jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib/locale/org-openide-util_ja.jar:/usr/pkgs/java/1.6.0.25/lib/visualvm/platform/lib /locale/org-openide-util_zh_CN.jar:/usr/pkgs/java/1.6.0.25/lib/dt.jar:/usr/pkgs/java/1.6.0.25/lib/tools.jar" -Dnetbeans.dirs= “/usr/pkgs/java/1.6.0.25/bin/../lib/visualvm//visualvm:/usr/pkgs/java/1.6.0.25/bin/../lib/visualvm//profiler:”-Dnetbeans .home="/usr/pkgs/java/1.6.0.25/lib/visualvm/platform" '-client' '-Xms24m' '-Xmx256m' '-Dsun.jvmstat.perdata.syncWaitMs=10000' '-Dsun.java2d .noddraw=true' '-Dsun.java2d.d3d=false' -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="/root/.visualvm/6u23/var/log/heapdump.hprof" org.netbeans.Main --userdir "/root/.visualvm/6u23" "--branding" "visualvm" 0<&0

4

2 回答 2

2

试试VisuamVM,你可以在 JDK 6 之后的每个 JDK 中找到它jdkInstallDir/bin/visualvm

于 2011-06-27T09:29:43.597 回答
1

我觉得你运气不好。有时,应用程序会进入无法被任何线程转储的死状态,kill、jstack 或 jvisualvm。

如果这种情况经常发生,那么设置一个调度线程转储和可能的 jmap -histo:live。您需要在应用程序变得无响应之前收集线程和内存转储。我更喜欢转储文本文件,因为您可以让脚本每半小时运行一夜,不需要显示,并且可以通过 grep 之类的东西轻松处理。Jvisualvm 非常适合查找内存泄漏的根本原因,但首先要确定你有一个,因为它可能会给你的应用程序带来压力并导致崩溃。

于 2011-11-01T11:42:13.647 回答