2013-11-22 8 views
6

내 Windows 2008r2에 실제로 Windows 서비스가 있습니다. 사용자로 실행 중입니다. 자, Jstack을 서비스에 사용합니다.자바 jstack 도구가 불충분 한 메모리 또는 첨부 할 수있는 권한이 충분하지 않습니다.

insufficient memory or insufficient privilege to attach 

을하지만 -F jstack을의 옵션을 사용하는 경우, 그것은 정밀하게 작업 할 수 있습니다하지만 오류가 발생합니다. 나는 jdk의 소스를 보았고, 클래스를 사용하여 BugSpotAgent으로 끝냈다.

나는 그것이 SYSTEM 사용자 권한 문제가, 내가 rawly jstack을을 사용할 수 없습니다 근본 원인을 알고 싶어? 또한 (그건 내가 jstack을을 실행하는 시스템을 사용자가 사용하는 것을 의미합니다) rawly 내 jstack을을 실행하는 PsExec.exe (도구)를 사용하려고 가지고 있지만, 그것은 여전히 ​​작동하지 않을 수 있습니다.

도와 주시겠습니까?

감사합니다. & 감사합니다!

+0

참조를 -s : //stackoverflow.com/questions/906620/jstack-and-not-enough-storage-is-available-to-process-this-command) Windows 서비스에 대한 대안을 제공합니다. – Vadzim

답변

4

jstack을같은 세션같은 사용자에 의해 시작 프로세스에 래치 할 수 있습니다. 세션이 지정되지 않으면 psexec 명령이 콘솔 세션에 래치되고 스레드 덤프를 가져 오는 동안이 오류가 발생합니다.

용액 PsExec를 함께 사용하는 사용자 및 세션을 보장하는 것은 타겟 자바 프로세스에 사용되는 것과 동일하다.

일반 사용자가 시작한 경우 a. -s 또는 -h 플래그없이 로그인 할 때 동일한 사용자 신임을 사용하십시오. b. 프로세스가 시작된 세션 ID를 찾으십시오. (작업 관리자를 사용하여 탭 사용자로 이동하여 찾을 수 있습니다). -i 플래그

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

예와 함께이 세션 ID를 사용하여

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

참고 : 자바 프로세스가 플래그를 사용하여 시스템 사용자에 의해 시작 된 경우도 (HTTP가 [jstack을하고 저장소가 부족하여이 명령을 처리 할 수 ​​없습니다]