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
감사 KevinO .... jcmd.exe, jli.dll 및 MSVCR100.dll을 임시 폴더에 넣고 jre를 가리 키도록 JAVA_HOME을 수정하고 시스템 경로에서 JDK가 _not_인지 확인했습니다. jcmd를 실행할 때 "주 클래스 sun.tools.jcmd.JCmd를 찾거나로드 할 수 없습니다"라는 메시지가 나타납니다. 그래서 나는이 클래스를 포함하고 있으므로 tools.jar를 거기에 놓았습니다. 같은 오류. 그래서 CLASSPATH 변수를 여기 가리 키도록 설정했습니다. 같은 오류. 다른 아이디어? – DaveyBob
"수정 사항을 기재하십시오"? 괜찮다면 다시 말해보십시오. – DaveyBob
@DaveyBob, 수정 사항을 참조하십시오. 최소 구성이 편집에 표시됩니다. – KevinO