실행중인 JVM의 매개 변수 가져 오기
실행중인 JVM의 매개 변수를 가져 오는 방법이 있습니까? JVM의 pid를 입력으로 받아 시작 매개 변수를 반환하는 jstat와 같은 명령 줄 도구가 있습니까? 특히 JVM을 시작할 때 제공된 -Xmx 및 -Xms 값에 관심이 있습니다. 감사합니다.
편집 : 내 제약을 명확히하기 위해. 확인하려는 JVM이 프로덕션 서버에서 실행 중입니다. 그렇기 때문에 우리는 최소한의 중단을 선호합니다. jstat를 사용하여 JVM을 모니터링 할 수 있으므로 매개 변수에 액세스하는 유사한 간단한 솔루션이 있기를 바랍니다.
편집 : 우리는 또한 jvisualvm을 사용하여 매개 변수를 얻으려고했습니다. 그러나 원격 jvm에 연결하려면 jstatd를 실행하고 JVM의 보안 설정을 수정해야합니다.이 설정은 프로덕션 서버에서 매우 파괴적이고 위험합니다.
다음과 같은 jps를 사용할 수 있습니다.
jps -lvm
다음과 같이 인쇄합니다.
4050 com.intellij.idea.Main -Xms128m -Xmx512m -XX:MaxPermSize=250m -ea -Xbootclasspath/a:../lib/boot.jar -Djb.restart.code=88
4667 sun.tools.jps.Jps -lvm -Dapplication.home=/opt/java/jdk1.6.0_22 -Xms8m
JDK8 문서에 따라 jcmd가 지금 제안 된 접근 방식 이기 때문에이 새로운 답변을 추가하고 있습니다.
향상된 진단 및 성능 오버 헤드 감소를 위해 이전 jstack, jinfo 및 jmap 유틸리티 대신 최신 유틸리티 인 jcmd를 사용하는 것이 좋습니다.
다음은 원하는 속성 / 플래그를 가져 오는 명령입니다.
jcmd pid VM.system_properties
jcmd pid VM.flags
우리는 아래와 같이 jcmd -l을 사용하려면 pid가 필요합니다.
username@users-Air:~/javacode$ jcmd -l
11441 Test
6294 Test
29197 jdk.jcmd/sun.tools.jcmd.JCmd -l
이제이 pid를 사용하여 원하는 속성 / 플래그를 가져올 시간입니다.
명령 : jcmd 11441 VM.system_properties
11441:
#Tue Oct 17 12:44:50 IST 2017
gopherProxySet=false
awt.toolkit=sun.lwawt.macosx.LWCToolkit
file.encoding.pkg=sun.io
java.specification.version=9
sun.cpu.isalist=
sun.jnu.encoding=UTF-8
java.class.path=.
java.vm.vendor=Oracle Corporation
sun.arch.data.model=64
java.vendor.url=http\://java.oracle.com/
user.timezone=Asia/Kolkata
java.vm.specification.version=9
os.name=Mac OS X
sun.java.launcher=SUN_STANDARD
user.country=US
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib
sun.java.command=Test
http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
jdk.debug=release
sun.cpu.endian=little
user.home=/Users/XXXX
user.language=en
java.specification.vendor=Oracle Corporation
java.home=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
file.separator=/
java.vm.compressedOopsMode=Zero based
line.separator=\n
java.specification.name=Java Platform API Specification
java.vm.specification.vendor=Oracle Corporation
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
java.runtime.version=9+181
user.name=XXXX
path.separator=\:
os.version=10.12.6
java.runtime.name=Java(TM) SE Runtime Environment
file.encoding=UTF-8
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
java.vendor.url.bug=http\://bugreport.java.com/bugreport/
java.io.tmpdir=/var/folders/dm/gd6lc90d0hg220lzw_m7krr00000gn/T/
java.version=9
user.dir=/Users/XXXX/javacode
os.arch=x86_64
java.vm.specification.name=Java Virtual Machine Specification
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
sun.os.patch.level=unknown
MyParam=2
java.library.path=/Users/XXXX/Library/Java/Extensions\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java\:.
java.vm.info=mixed mode
java.vendor=Oracle Corporation
java.vm.version=9+181
sun.io.unicode.encoding=UnicodeBig
java.class.version=53.0
socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16
Command : jcmd 11441 VM.flags output:
11441:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1ConcRefinementThreads=4 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=67108864 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5830092 -XX:NonProfiledCodeHeapSize=122914074 -XX:ProfiledCodeHeapSize=122914074 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:-UseAOT -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
For more instructions of usages of jcmd, see my blog post
Alternatively, you can use jinfo
jinfo -flags <vmid>
jinfo -sysprops <vmid>
On Linux:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
On Mac OSX:
java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'
On Windows:
C:\>java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Source: https://www.mkyong.com/java/find-out-your-java-heap-memory-size/
If you can do this in java, try:
Example:
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();
for (String arg : jvmArgs) {
System.out.println(arg);
}
JConsole can do it. Also you can use a powerful jvisualVM tool, which also is included in JDK since 1.6.0.8.
This technique applies for any java application running local or remote.
- Start your java application.
- Run JVisualVM found in you JDK (such as C:\Program Files\Java\jdk1.8.0_05\bin\jvisualvm.exe).
- When this useful tool starts look at the list of running java application under the "Local" tree node.
- Double click [your application] (pid [n]).
- On the right side there will be inspection contents in tab for the application. In the middle of the Overview tab you will see the JVM arguments for the application.
jvisualvm can be found in any JDK since JDK 6 Update 7. Video tutorial on jvisualvm is here.
Windows 10 or Windows Server 2016 provide such information in their standard task manager. A rare case for production, but if the target JVM is running on Windows, the simplest way to see its parameters is to press Ctrl+Alt+Delete, choose the Processes tab and add the Command line column (by clicking the right mouse button on any existing column header).
If you are interested in getting the JVM parameters of a running java process, then just do kill -3 java-pid. You will get a core dump file in which you can find the jvm parameters used while launching the java application.
You can use the JConsole command (or any other JMX client) to access that information.
참고URL : https://stackoverflow.com/questions/5317152/getting-the-parameters-of-a-running-jvm
'developer tip' 카테고리의 다른 글
펄의 foreach 루프에서 자동으로 루프 인덱스를 얻습니다. (0) | 2020.10.18 |
---|---|
두 장고 쿼리 셋의 합집합을 어떻게 찾을 수 있습니까? (0) | 2020.10.18 |
수도 뱅뱅이란? (0) | 2020.10.17 |
파일 트리 다이어그램을 그리는 데 사용할 도구 (0) | 2020.10.17 |
NUnit 테스트를 병렬로 실행하려면 어떻게해야합니까? (0) | 2020.10.17 |