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

use*_*487 7 java memory privilege jstack

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

 insufficient memory or insufficient privilege to attach
Run Code Online (Sandbox Code Playgroud)

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

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

你能帮助我吗?

感谢和问候!

M.N*_*M.N 5

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