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

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

insufficient memory or insufficient privilege to attach 

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

我想知道我不能原始使用Jstack的根本原因,是SYSTEM用户权限问题吗? 我也尝试使用PsExec.exe (一个工具)来原始运行我的Jstack (这意味着我将使用SYSTEM用户来运行Jstack ),但它仍然无法工作。

你能帮助我吗?

感谢和问候!

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

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

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

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

例如

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

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