2013-11-22 21 views
6

我真的很困惑: 在我的windows 2008r2中,我有一個windows服務,實際上它是一個java進程,運行時用戶名爲SYSTEM。現在,我使用JSTACK純粹的服務。但它出現的錯誤:java jstack工具內存不足或者權限不足

insufficient memory or insufficient privilege to attach 

但是,如果使用Jstack的選項-F,可以精細的工作。我查看jdk的源代碼,它使用一個類BugSpotAgent完成上述操作。

我想知道的根本原因,我不能使用Jstack rawly,是它的SYSTEM用戶權限的問題?我也有嘗試使用PsExec.exe(工具)來運行我的Jstack rawly(這意味着我將用SYSTEM用戶運行Jstack),但它仍然無法正常工作。

你能幫我嗎?

謝謝&關心!

+0

參見[Jstack並沒有足夠的存儲是可用來處理該命令(HTTP: //stackoverflow.com/questions/906620/jstack-and-not-enough-storage-is-available-to-process-this-command)用於Windows服務的解決方法。 – Vadzim

回答

4

jstack只能鎖定到由相同的用戶同一會話啓動的進程。當沒有指定會話時,psexec命令將鎖定到控制檯會話並在嘗試獲取線程轉儲時引發此錯誤。

溶液是確保與PSEXEC使用的用戶和會話是一樣的一個用於目標java程序。

如果它已經由普通用戶啓動, a。 b。使用相同的用戶憑據登錄時不使用-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

注:如果java進程已被系統用戶開始使用標誌-s