jstack - 已知文件不安全

2022-08-31 20:37:36

我在x86_64 CentOS 5.7上运行tomcat 5.5,使用32位Oracle Java 1.6.0。

tomcat 使用的 JVM 进程有 6421 pid。雄猫工作正常。

运行时,它会失败,并显示:jstack

[root@mybox ~]# jstack 6421
6421: well-known file is not secure

要获得任何合理的输出,我需要使用强制选项:

[root@mybox ~]# jstack -F 6421
Attaching to process ID 6421, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
Deadlock Detection:

No deadlocks found.
(...)

问题是

  1. 错误消息“已知文件不安全”是什么意思?
  2. 什么是“众所周知”的文件?
  3. 为什么/何时命令在没有强制选项的情况下不起作用?jstack

提前致谢。


答案 1

这可能是由于 /tmp 中用于与进程通信的文件具有与 jstack 获取的权限不同的权限。有问题的文件是 /tmp/hsperfdata_$USER/$PID。

不知道为什么它与 -F 一起工作,因为手册页只是说“当 'jstack [-l] pid' 没有响应时强制堆栈转储。


答案 2

使用时,jvm 将被冻结-F

如果您能找到 .只需尝试切换到 , 然后 。您正在使用“root”运行,但该进程可能不属于 root。file: /tmp/hsperfdata_$USER/$PID$USERexec jstack

如果没有登录 shell(即守护程序用户),因此无法切换到该用户,则可以使用$USERsudo -u $USER jstack $PID


推荐