programing

실행 중인 JVM의 매개 변수 가져오기

prostudy 2022. 9. 14. 21:29
반응형

실행 중인 JVM의 매개 변수 가져오기

실행 중인 JVM의 파라미터를 취득하는 방법이 있습니까?

JVM의 PID를 입력으로 받아 시작 파라미터를 반환하는 jstat와 같은 명령줄 도구가 있습니까?특히 JVM을 시작할 때 주어진 -Xmx-Xms 값에 관심이 있습니다.

JVM에 대한 제약사항을 명확히 하기 위해 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

JDK 8에 따르면 jcmd가 권장되는 접근법입니다.

진단을 강화하고 성능 오버헤드를 줄이려면 이전 jstack, jinfo 및 jmap 유틸리티 대신 최신 유틸리티 jcmd를 사용하는 것이 좋습니다.

다음은 원하는 속성/플래그를 가져오는 명령어입니다.

jcmd pid VM.system_properties
jcmd pid VM.flags

PID가 필요해요이 경우,jcmd -l이하와 같이

cd ~/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

명령어: jcmd 11441 VM.flags 출력:

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

jcmd의 사용방법에 대한 자세한 내용은 제 블로그 포스트를 참조하십시오.

Linux의 경우:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Mac OS X의 경우:

java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

Windows 의 경우:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

출처: Java메모리 크기를 확인합니다.

또는 jinfo를 사용할 수 있습니다.

jinfo -flags <vmid> 
jinfo -sysprops <vmid>

Java에서 이 작업을 수행할 수 있는 경우 다음을 시도해 보십시오.

런타임 MXBean

관리 공장

예:

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();
for (String arg : jvmArgs) {
    System.out.println(arg);
}

Linux 에서는 다음 명령을 실행하여 결과를 볼 수 있습니다.

ps aux | grep "java"

J콘솔은 할 수 있어요.또한 강력한 Java VisualVM 툴을 사용할 수 있습니다.이 툴은 1.6.0.8 이후 JDK에도 포함되어 있습니다.

Windows 10 또는 Windows Server 2016은 이러한 정보를 표준 작업 관리자에 제공합니다.

운영 환경에서는 드문 경우이지만 타깃 JVM이 Windows에서 실행되고 있는 경우 파라미터를 확인하는 가장 간단한 방법은 + +를 누르고 Processes 탭을 선택한 후 Command line column을 추가하는 것입니다(기존 열 헤더에서 마우스 오른쪽 버튼을 클릭).

중인 이 있는 경우 JVM 파라미터를 만 하면 .kill -3 java-pid.

Java 응용 프로그램을 실행할 때 사용된 JVM 매개 변수를 찾을 수 있는 코어 덤프 파일을 얻을 수 있습니다.

컨테이너의(No in in없없없없없없없없없(미사용))ps,tree,jcmdetc)ID를 경우 를 나열).ls -l /proc 특정 cat /proc/<pid>/cmdline.

예:

$ cat /proc/614/cmdline

다음과 같은 인쇄가 가능합니다.

java-D[Standalone]-server-Xms64m-Xmx512m-XX:MetaspaceSize=96M-XX:MaxMetaspaceSize=256m-Djava.net.preferIPv4Stack=true-Djboss.modules.system.pkgs=org.jboss.byteman-Djava.awt.headless=true-Dkeycloak.profile=preview-Djboss.as.management.blocking.timeout=1800-Djboss.node.name=keycloak1loak/modulesorg.jboss.as.standalone

모든 프로세스에서 동일한 값을 읽으려면(명령어 실행 중 사라진 권한 오류 및 프로세스를 폐기합니다).

for i in $(find /proc/ -maxdepth 2 -type f -name cmdline -exec ls {} 2>/dev/null \; ); do echo "$i"; cat $i 2>/dev/null; echo; echo; done

.Java 프로세스로 할 수 .이러한 작업은 다음 명령을 사용하여 실시할 수 있습니다.grep.

JConsole 명령(또는 다른 JMX 클라이언트)을 사용하여 해당 정보에 액세스할 수 있습니다.

_JAVA_OPTIONS는 확장 가능한 환경 변수입니다.

echo $_JAVA_OPTIONS

이 기술은 로컬 또는 원격에서 실행되는 모든 Java 응용 프로그램에 적용됩니다.

  1. Java 응용 프로그램을 시작합니다.
  2. JDK에 있는 Java Visual VM을 실행합니다(C:\Program Files\Java\jdk1.8.0_05\bin\jvisualvm.exe 등).
  3. 이 유용한 도구가 시작되면 "로컬" 트리 노드에서 실행 중인 Java 응용 프로그램 목록을 확인합니다.
  4. [응용 프로그램](pid [n])을 더블 클릭합니다.
  5. 오른쪽에는 어플리케이션 탭에 검사 내용이 있습니다.[ Overview ] 중앙에 애플리케이션의 JVM 인수가 표시됩니다.

Java Visual VM은 JDK 6 Update 7 이후 모든 JDK에서 찾을 수 있습니다.Java Visual VM에 대한 비디오 튜토리얼은 이쪽입니다.

는 주로 ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ를 합니다.ps -ef | grep javaPID + 사용된 명령줄 파라미터를 사용하여 프로세스를 출력합니다.

언급URL : https://stackoverflow.com/questions/5317152/getting-the-parameters-of-a-running-jvm

반응형