Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

jstack 命令报错 Unable to open socket file: target process not responding or HotSpot VM not loaded

Java 命令行工具 Java 命令行工具


我们在通过 jstack 命令查看 java 进程的栈信息时,会报错 Unable to open socket file: target process not responding or HotSpot VM not loaded,主要原因是当前执行命令用户的权限没有对 java 程序启动用户的执行权限。

解决方法

问题演示:

[demo@Linux ~]# jstack 23547
23547: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

提示第一行显示“当前不能打开 socket file,导致不能获取目标进程的回复”。

java 程序启动后,默认(请注意是默认)会在 /tmp/hsperfdata_{user_name} 目录下以该进程的 id 为文件名新建文件,并在该文件中存储 jvm 运行的相关信息,其中的 user_name 为当前的用户名

问题的本质是当前执行 jstack 命令用户名和 java 程序启动的用户不一致,导致当前用户打不开如上的文件,我们可以通过 ps -ef | grep java 查看相应 java 程序的启动用户后,切换到对应用户后,再执行即可。