代码之家  ›  专栏  ›  技术社区  ›  ahu

如何创建JavaWebStart应用程序的线程转储

  •  5
  • ahu  · 技术社区  · 16 年前

    是否可以获取JavaWebStart应用程序的线程转储?如果是,怎么做?

    如果有一个简单的解决方案,使非开发人员(客户)能够创建线程转储,那就太好了。或者,是否可以通过编程方式创建线程转储?

    在JavaWebStart控制台中,我可以通过按“t”获得线程列表,但不包括堆栈跟踪。

    5 回复  |  直到 16 年前
        1
  •  6
  •   scotty    16 年前

    在控制台中,按V而不是T:

    t:   dump thread list
    v:   dump thread stack
    

    这在JDK6下工作。不了解别人。

    在Windows下: 在Java控制台中键入ctrl-break。

    在Unix下: kill -3 <java_process_id>

    还有一件事:正如其他人所说,您可以通过 Thread Thread.getAllStackTraces() 在JDK6之前,因为内存泄漏。

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648

    当做

    斯科蒂

        2
  •  2
  •   Asgeir S. Nilsen    16 年前

    最近的JDK(遗憾的是不是JRE)包括了像jstack这样的工具,它可以做这些事情。版本5中的JVM包括用于获取线程转储、内存统计信息等的JMX扩展。所有java应用程序,包括web start应用程序,都具有此功能。

    您要么需要安装JDK,要么需要编写一个执行相同操作的JMX客户机。看看 http://java.sun.com/javase/6/docs/technotes/guides/management/ 获取更多信息。

        3
  •  2
  •   ashirley    16 年前

    因为1.5可以使用 Thread.getAllStackTraces() 得到 Map 迭代。

    理想的输出应该是通过Ctrl-\(或Ctrl Break或类似方式)生成的输出,但似乎没有一种记录在案的生成方法。如果您愿意将自己局限于sun的JVM(或者我想使用反射),您可以在 sun.* 打包,看看有没有什么有趣的东西出现。

        4
  •  2
  •   sth    14 年前

    尝试

    StackTraceElement[] stack = Thread.currentThread().getStackTrace();
    

    然后,您可以迭代集合,以显示您感兴趣的顶部x堆栈元素。

        5
  •  0
  •   Marcio Aguiar    16 年前

    Thread.currentThread().dumpStack();
    

    这将把堆栈跟踪打印到System.out

    推荐文章