java jstack工具内存不足或附加权限不足

时间:2013-11-22 16:23:05

标签: java memory jstack privilege

我真的很困惑:     在我的Windows 2008r2中,我有一个Windows服务,实际上它是一个以 SYSTEM 用户身份运行的java进程。现在,我将 Jstack 原始地用于该服务。但它出现了错误:

 insufficient memory or insufficient privilege to attach

但是如果我使用Jstack的选项 -F ,它可以很好地工作。我查看了jdk的源代码,它使用了一个 BugSpotAgent 类来完成上面的工作。

我想了解根本原因我不能使用 Jstack ,是 SYSTEM 用户权限问题?我也尝试使用 PsExec.exe (一种工具)来粗略地运行我的 Jstack (这意味着我将使用 SYSTEM 用户来运行< strong> Jstack ),但它仍然无法正常工作。

你能帮助我吗?

谢谢&amp;此致!

1 个答案:

答案 0 :(得分:5)

jstack 只能锁定同一会话相同用户启动的流程。如果未指定会话, psexec 命令将锁定到控制台会话,并在尝试获取线程转储时抛出此错误。

解决方案是为了确保用于 psexec 的用户和会话与用于目标java进程的用户和会话相同。

如果它是由普通用户启动的,    一个。使用相同的用户凭据登录而不使用-s或-h标志    湾找到启动进程的会话ID。 (您可以使用任务管理器找到它并转到选项卡用户)。将此会话ID与标志-i

一起使用

psexec \\server-name -u username -p password -i session-id command

e.g。

psexec \\192.168.1.1 -u john -p pass123 -i 1 jstack.exe 4242

注意:如果SYSTEM用户已经启动了java进程,请使用标志-s