jstack/jmap java 1.8 中的备选方案

jstack/jmap alternative in java 1.8

随着 1.8 版本的发布,jstack 和 jmap(可能还有其他)已从 一些 java 发行版中删除(即 windows 发行版仍然有它们,但它们不存在于 linux 发行版中)。

Oracle 表示它们是实验性的,因此可以随时删除它们。 但是,我发现这些小工具在过去对调试非常有用。例如,我经常使用 jstack 打印特定 java 进程中的线程列表,等等

问题:您是否知道它们的任何替代品,或者 Oracle 是否简单地删除了它们而不提供任何替代品?

编辑 1

显然,这发生在 "server JRE" 版本中(如这个 http://download.oracle.com/otn/java/jdk/8u51-b16/server-jre-8u51-linux-x64.tar.gz),但不会出现在 JDK 版本中。 这与 java 1.7 不同,其中服务器 JRE 还包含这些文件。

虽然这背后的推理现在更有意义了,但我仍然想知道服务器 JRE 中是否有类似 jmap/jstack 的替代工具(安装 jdk 似乎有点麻烦服务器,只是为了查看一些线程信息)

我不确定您是从哪里获得有关它们已从 linux 发行版中删除的信息。我安装的最新的JDK_1.8.0_60还有。

如果它消失了,jconsole 会获取堆栈跟踪以及更多信息。

我从 Oracle 的网站上获得了标准下载:

shackle@shackle-desktop:~/NetBeansProjects/CppApplication_2$ /usr/local/jdk1.8.0_60/bin/java -XshowSettings:properties -version
Property settings:
    awt.toolkit = sun.awt.X11.XToolkit
    file.encoding = UTF-8
    file.encoding.pkg = sun.io
    file.separator = /
    java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
    java.awt.printerjob = sun.print.PSPrinterJob
    java.class.path = .
    java.class.version = 52.0
    java.endorsed.dirs = /usr/local/jdk1.8.0_60/jre/lib/endorsed
    java.ext.dirs = /usr/local/jdk1.8.0_60/jre/lib/ext
        /usr/java/packages/lib/ext
    java.home = /usr/local/jdk1.8.0_60/jre
    java.io.tmpdir = /tmp
    java.library.path = /usr/local/jdk1.8.0_60/jre/lib/i386/server
        /usr/local/jdk1.8.0_60/jre/lib/i386
        /usr/local/jdk1.8.0_60/jre/../lib/i386
        /home/shackle/rcslib//lib/
        /usr/local/jdk1.8.0_25/jre/lib/i386/client/

        .
        /usr/local/lib
        /local/lib/
        /usr/java/packages/lib/i386
        /lib
        /usr/lib
    java.runtime.name = Java(TM) SE Runtime Environment
    java.runtime.version = 1.8.0_60-b27
    java.specification.name = Java Platform API Specification
    java.specification.vendor = Oracle Corporation
    java.specification.version = 1.8
    java.vendor = Oracle Corporation
    java.vendor.url = http://java.oracle.com/
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    java.version = 1.8.0_60
    java.vm.info = mixed mode
    java.vm.name = Java HotSpot(TM) Server VM
    java.vm.specification.name = Java Virtual Machine Specification
    java.vm.specification.vendor = Oracle Corporation
    java.vm.specification.version = 1.8
    java.vm.vendor = Oracle Corporation
    java.vm.version = 25.60-b23
    line.separator = \n 
    os.arch = i386
    os.name = Linux
    os.version = 3.2.0-32-generic
    path.separator = :
    sun.arch.data.model = 32
    sun.boot.class.path = /usr/local/jdk1.8.0_60/jre/lib/resources.jar
        /usr/local/jdk1.8.0_60/jre/lib/rt.jar
        /usr/local/jdk1.8.0_60/jre/lib/sunrsasign.jar
        /usr/local/jdk1.8.0_60/jre/lib/jsse.jar
        /usr/local/jdk1.8.0_60/jre/lib/jce.jar
        /usr/local/jdk1.8.0_60/jre/lib/charsets.jar
        /usr/local/jdk1.8.0_60/jre/lib/jfr.jar
        /usr/local/jdk1.8.0_60/jre/classes
    sun.boot.library.path = /usr/local/jdk1.8.0_60/jre/lib/i386
    sun.cpu.endian = little
    sun.cpu.isalist = 
    sun.desktop = gnome
    sun.io.unicode.encoding = UnicodeLittle
    sun.java.launcher = SUN_STANDARD
    sun.jnu.encoding = UTF-8
    sun.management.compiler = HotSpot Tiered Compilers
    sun.os.patch.level = unknown
    user.country = US
    user.dir = /home/shackle/NetBeansProjects/CppApplication_2
    user.home = /home/shackle
    user.language = en
    user.name = shackle
    user.timezone = 

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) Server VM (build 25.60-b23, mixed mode)
shackle@shackle-desktop:~/NetBeansProjects/CppApplication_2$