【问题标题】:get java version of a running java process获取正在运行的 java 进程的 java 版本
【发布时间】:2015-01-09 20:22:16
【问题描述】:

我可以使用 jps 列出正在运行的 java 进程,并使用 jstack -l process_id 来获取正在运行的 java 进程的堆栈信息。我想知道这个过程在哪个 java 版本上运行。有没有办法做到这一点?我不必使用 jstack 工具。谢谢。

jstack -l 23819 2014-11-12 12:36:11 全线程转储 OpenJDK 64-Bit Server VM(23.25-b01 混合模式):

“附加监听器”守护进程prio=10 tid=0x000000000272f800 nid=0x614b 等待条件[0x0000000000000000] java.lang.Thread.State: 可运行

锁定的可拥有同步器: - 无

【问题讨论】:

    标签: java jstack


    【解决方案1】:

    在 Linux 中你可以这样做

    sudo strings /proc/<java_pid>/smaps |grep jre
    

    这将产生类似于

    的东西

    7f8ff82ac000-7f8ff82ad000 r-xp 00000000 fd:00 252363860 /usr/java/jdk1.8.0_141/jre/lib/amd64/libjaas_unix.so

    从这里你可以清楚地看到它使用的是什么JDK版本。

    【讨论】:

      【解决方案2】:

      使用标准命令的简单解决方案如下所示:

      lsof -p PID | grep jdk
      

      它为您提供进程加载的文件列表。

      【讨论】:

        【解决方案3】:

        我认为 Andrew 的解决方案更好,并且可能是您正在寻找的。不过这里有另一个解决方案:

        ps -A | grep "^ <the pid>" | grep -o "jdk.*.jdk"
        

        我正在运行的程序的输出:

        jdk1.8.0_05.jdk
        

        【讨论】:

          【解决方案4】:

          你可以通过 jcmd 来做,像这样:

          jcmd process_id VM.version

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-21
            • 1970-01-01
            • 2019-08-09
            • 1970-01-01
            相关资源
            最近更新 更多