我使用32位Oracle Java 1.6.0在x86_64 CentOS 5.7上运行tomcat 5.5.
tomcat使用的JVM进程有6421 pid.Tomcat工作正常.
运行jstack时失败:
[root@mybox ~]# jstack 6421
6421: well-known file is not secure
Run Code Online (Sandbox Code Playgroud)
要获得任何合理的输出,我需要使用force选项:
[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.
(...)
Run Code Online (Sandbox Code Playgroud)
该问题是:
jstack强制选项,该命令何时/何时不起作用?提前致谢.
Rog*_*sjö 34
这可能是由于/ tmp中的文件用于与具有与jstack获得的权限不同的权限的进程进行通信.有问题的文件是/ tmp/hsperfdata_ $ USER/$ PID.
不知道为什么它与-F一起工作,因为手册页只是说"当'jstack [-l] pid'没有响应时强制进行堆栈转储."
Eva*_* Y. 23
当-F使用时,jvm将被冻结.
如果你能找到的话file: /tmp/hsperfdata_$USER/$PID.只是尝试切换到$USER,然后exec jstack.您正在使用" root " 运行,但该进程可能不属于root.
如果$USER没有登录shell(即守护进程用户),因而无法切换到该用户,可以通过使用来解决这个问题sudo -u $USER jstack $PID
您需要以拥有 java 进程的用户身份运行 jstack 命令:
例如,如果您的 java 应用程序由名为 的用户拥有java-user:
sudo -u java-user jstack -l <pid>
Run Code Online (Sandbox Code Playgroud)