首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果tomcat以root用户身份运行,则无法运行jstack

如果tomcat以root用户身份运行,则无法运行jstack
EN

Stack Overflow用户
提问于 2021-04-17 19:20:19
回答 1查看 77关注 0票数 0

我在CentOS 7上运行jdk1.8.0_161 + apache-tomcat-8.0.11。

如果我以root帐号启动tomcat,我就不能对它运行jstack:

代码语言:javascript
复制
# jstack -l 1451
<It stuck, but tomcat has output in catalina.out>

# jstack -l 1451 -F
Attaching to core -F from executable 1451, please wait...
Error attaching to core file: cannot open binary file
sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:286)
    at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:673)
    at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)
    at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)
    at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
    at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:156)
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:191)
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
    at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)
    at sun.tools.jstack.JStack.main(JStack.java:106)

如果我以非root用户身份运行tomcat,jstack可以正常工作。

我试着在谷歌上搜索"sun.jvm.hotspot.debugger.DebuggerException:无法打开二进制文件“,但没有找到任何有用的东西。

有人知道发生了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-17 19:48:51

jstack man页面中:

代码语言:javascript
复制
The PATH environment variable needs to contain the location of the jvm.dll that is used by the
target process, or the location from which the crash dump file was produced. For example:

set PATH=<jdk>\jre\bin\client;%PATH%

以root用户身份运行时,请适当设置路径。注意:默认情况下,sudo does not inherit the caller's environment variables。您可能会这样做:

代码语言:javascript
复制
$ sudo PATH=/path/to/jre/bin/whatever;$PATH jstack -l pid

您还可以使用-E选项调用sudo来保留环境变量:

代码语言:javascript
复制
$ sudo -E jstack -l pid

man sudo有更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67137566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档