получить java-версию запущенного java-процесса

Я могу использовать 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: RUNNABLE

Блокированные собственные синхронизаторы: - Нет


person user3282611    schedule 12.11.2014    source источник


Ответы (4)


Вы можете сделать это через jcmd, например:

jcmd process_id VM.версия

person Andrew    schedule 12.11.2014

В 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 он использует.

person Tagar    schedule 27.09.2017

Простое решение со стандартной командой будет выглядеть так:

lsof -p PID | grep jdk

Он дает вам список загруженных файлов процессом.

person Marco    schedule 13.10.2015

Я думаю, что решение Эндрю лучше и, вероятно, то, что вы ищете. Тем не менее вот еще одно решение:

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

Вывод для программы, которую я запускал:

jdk1.8.0_05.jdk
person AtlasMeh-ed    schedule 12.11.2014