2017-04-26 1 views
0

클라이언트 사이트에 설치된 Windows 서버에서 jcmd.exe를 삭제하여 힙 및 스레드 문제를 해결할 수있는 방법을 찾으려고합니다. 환경을 복잡하게하기 때문에 전체 JDK를 설치하고 싶지는 않습니다.JDK없이 jcmd를 실행하는 방법은 무엇입니까?

jcmd.exe는 JDK의 일부 구성 요소가 확실히 실행되기를 원하지만 어떤 구성 요소를 실행할지를 결정할 수 없습니다. 폴더에 압축을 푼 작은 세트로 가져 와서 데이터를 캡처 한 다음 파괴하면 완벽 할 것입니다.

jcmd가 실행해야하는 JDK 구성 요소를 아는 사람은 누구입니까?

답변

0

jcmd.exe의 빠른 검사 계시 :

 ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7fff01820000) 
    KERNEL32.DLL => /c/WINDOWS/system32/KERNEL32.DLL (0x7ffeff180000) 
    KERNELBASE.dll => /c/WINDOWS/system32/KERNELBASE.dll (0x7ffefe810000) 
    SYSFER.DLL => /c/WINDOWS/System32/SYSFER.DLL (0x54f10000) 
    jli.dll => /c/apps/jdk1.8.0_121/bin/jli.dll (0x51ec0000) 
    MSVCR100.dll => /c/apps/jdk1.8.0_121/bin/MSVCR100.dll (0x51c40000) 
    ADVAPI32.dll => /c/WINDOWS/system32/ADVAPI32.dll (0x7ffefeeb0000) 
    msvcrt.dll => /c/WINDOWS/system32/msvcrt.dll (0x7fff01720000) 
    sechost.dll => /c/WINDOWS/system32/sechost.dll (0x7ffeff0c0000) 
    RPCRT4.dll => /c/WINDOWS/system32/RPCRT4.dll (0x7ffefec20000) 
    USER32.dll => /c/WINDOWS/system32/USER32.dll (0x7ffefef60000) 
    COMCTL32.dll => /c/WINDOWS/WinSxS/amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.10586.672_none_a2d6b3cea53ff843/COMCTL32.dll (0x7ffef8460000) 
    GDI32.dll => /c/WINDOWS/system32/GDI32.dll (0x7ffeff230000) 
    combase.dll => /c/WINDOWS/system32/combase.dll (0x7ffeff3c0000) 
    bcryptPrimitives.dll => /c/WINDOWS/system32/bcryptPrimitives.dll (0x7ffefe540000) 

는 따라서 그 msvcr100.dll을 표시하고 jli.dll는 JDK의 유일한 필수 구성 요소가 될 것입니다. 초고속 테스트는이 세 파일로 충분하다는 것을 나타내는 것으로 보이지만 테스트 상황이 완벽하지 않을 수 있음을 인정합니다.

EDIT : 더 자세히 살펴보면 다음과 같이 작동하는 것으로 확인 된 최소 구성이 있습니다. 디렉토리 구조를 다소 수정하고 CLASSPATH, JAVA_HOME 및 PATH와 같은 항목을 설정할 수 있습니다. 나는 모든 순열을 조사하지 않았다.

.: 
bin/ COPYRIGHT* jre/ lib/ LICENSE* 

./bin: 
jcmd.exe* jli.dll* msvcr100.dll* 

./jre: 
bin/ COPYRIGHT* lib/ LICENSE* 

./jre/bin: 
attach.dll* java.dll* jli.dll* net.dll* nio.dll* server/ unpack.dll* 
verify.dll* zip.dll* 

./jre/bin/server: 
classes.jsa* jvm.dll* Xusage.txt* 

./jre/lib: 
amd64/ rt.jar* 

./jre/lib/amd64: 
jvm.cfg* 

./lib: 
jvm.lib* tools.jar* 

나는 중요하다고 생각하여 COPYRIGHT 및 LICENSE 파일도 남겼습니다.

테스트 :하지만 꽤있다, 길 아래에 더 저를 얻었다

bin\jcmd.exe 16696 Thread.print 
16696: 
2017-04-27 18:01:49 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.121-b13 mixed mode): 

"Worker-32" #84 prio=5 os_prio=0 tid=0x000000001bcaf800 nid=0x416c in 
Object.wait() [0x00000000335ef000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) 
    - locked <0x00000000c21120a8> (a org.eclipse.core.internal.jobs.WorkerPool) 
    at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:52) 

"Worker-31" #83 prio=5 os_prio=0 tid=0x000000001bcb7800 nid=0x315c in 
Object.wait() [0x00000000312ef000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) 
    - locked <0x00000000c21120a8> (a org.eclipse.core.internal.jobs.WorkerPool) 
    at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:52) 

<snip>... 


F:\tmp\t1>bin\jcmd 16696 VM.flags 
16696: 
-XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 
-XX:MaxHeapSize=1073741824 -XX:MaxNewSize=357564416 
-XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops 
-XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation 
-XX:+UseParallelGC 
+0

감사 KevinO .... jcmd.exe, jli.dll 및 MSVCR100.dll을 임시 폴더에 넣고 jre를 가리 키도록 JAVA_HOME을 수정하고 시스템 경로에서 JDK가 _not_인지 확인했습니다. jcmd를 실행할 때 "주 클래스 sun.tools.jcmd.JCmd를 찾거나로드 할 수 없습니다"라는 메시지가 나타납니다. 그래서 나는이 클래스를 포함하고 있으므로 tools.jar를 거기에 놓았습니다. 같은 오류. 그래서 CLASSPATH 변수를 여기 가리 키도록 설정했습니다. 같은 오류. 다른 아이디어? – DaveyBob

+0

"수정 사항을 기재하십시오"? 괜찮다면 다시 말해보십시오. – DaveyBob

+0

@DaveyBob, 수정 사항을 참조하십시오. 최소 구성이 편집에 표시됩니다. – KevinO

관련 문제