एक चल JVM के मापदंडों को प्राप्त करना


90

क्या एक रनिंग जेवीएम के मापदंडों को प्राप्त करने का कोई तरीका है? क्या जेस्टैट जैसा कोई कमांड लाइन टूल है जो जेवीएम के इनपुट के रूप में लेता है और अपने शुरुआती मापदंडों को लौटाता है? मुझे विशेष रूप से -Xmx और -Xms मूल्यों में दिलचस्पी है जो JVM शुरू करते समय दिए गए थे। धन्यवाद।

संपादित करें : मेरी बाधाओं को स्पष्ट करने के लिए। हम जिस जेवीएम की जांच करना चाहते हैं, वह प्रोडक्शन सर्वर पर चल रहा है। इसीलिए, हम न्यूनतम व्यवधान को प्राथमिकता देते हैं। हम jstat का उपयोग करके JVM की निगरानी करने में सक्षम हैं, और इसलिए हमें उम्मीद है कि मापदंडों तक पहुंचने के लिए एक समान सरल समाधान है।

संपादित करें : हमने jvisualvm का उपयोग करके पैरामीटर प्राप्त करने का भी प्रयास किया। लेकिन एक दूरस्थ jvm से जुड़ने के लिए, हमें jstatd को चलाने और JVM की सुरक्षा सेटिंग्स को संशोधित करने की आवश्यकता है, जो हमें एक उत्पादन सर्वर पर बहुत ही विघटनकारी और जोखिम भरा लगा।


आप वहां एक टूल पा सकते हैं: JDK टूल्स और यूटिलिटीज
गुइल्यूम हस्टा

जवाबों:


145

आप जैसे 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

6
एक जादू की तरह काम करता है। मैंने jdk में jinfo टूल की भी खोज की जिसका एक समान कार्य है
HH

2
ध्यान दें कि उत्पादन jps -lvmभ्रामक हो सकता है। हमेशा jinfo या अन्य टूल के साथ डबल चेक करें। समस्या यह हो सकती है यदि "-XX" को सामान्य प्रोग्राम तर्क की तरह पारित किया जाए और जेवीएम द्वारा अनदेखा किया जाए। यह मामला है अगर आप java -jar my.jar -Xmx3gइसके बजाय का उपयोग करते हैंjava -Xmx3g -jar my.jar
जुराज मार्टिंका

36

मैं इस नए उत्तर को जोड़ रहा हूं क्योंकि JDK8 प्रलेखन के अनुसार jcmd का सुझाव अब दिया गया है।

यह सुझाव दिया गया है कि नवीनतम उपयोगिता का उपयोग करें, पिछले jstack, jinfo के बजाय jcmd, और बढ़ी हुई डायग्नोस्टिक्स के लिए jmap उपयोगिताओं और प्रदर्शन ओवरहेड को कम किया जाए।

नीचे अपने गुण / झंडे पाने के लिए आदेश दिए गए हैं जो आप चाहते हैं।

jcmd pid VM.system_properties
jcmd pid VM.flags

हमें पीआईडी ​​की आवश्यकता है, इसके लिए नीचे दिए गए तरह jcmd -l का उपयोग करें

username@users-Air:~/javacode$ jcmd -l 
11441 Test 
6294 Test 
29197 jdk.jcmd/sun.tools.jcmd.JCmd -l 

अब आप चाहते हैं कि गुण / झंडे पाने के लिए इन pids का उपयोग करने का समय

कमांड: 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 के usages के अधिक निर्देशों के लिए, मेरी ब्लॉग पोस्ट देखें


मिलान की कोई प्रक्रिया नहीं मिल सकी: 'pid'
Ch Vas

1
pid को java process id से बदलना चाहिए, Linux os को आम तौर पर हम इसे “ps -ef | grep jdk ”, यदि आप इसके द्वारा कई प्रक्रियाएँ देखते हैं तो एक नया प्रश्न पूछें या इसे गूगल करने का प्रयास करें
विपिन


21

वैकल्पिक रूप से, आप jinfo का उपयोग कर सकते हैं

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

3
यह उपयोगिता असमर्थित है और JDK के भविष्य के संस्करणों में उपलब्ध हो भी सकती है और नहीं भी।
GoYun.Info

-flagsविकल्प OpenJDK 64-बिट सर्वर VM (बिल्ड 1.8.0_111-आंतरिक-अल्पाइन-आर0-बी 14) (वर्तमान java:8u111-jdk-alpineडॉकर छवि) में मौजूद नहीं है
एंथनी ओ

मैंने यह उत्तर जावा 6/7 को ध्यान में रखकर लिखा। इससे परे कि jinfo अविश्वसनीय है, लेकिन flagsडेबियन जेसी पर आधारित आधिकारिक डॉकर जावा छवि के साथ काम करता है docker run --rm -it java:8u111-jdk java -version && jinfo -h
जर्क Przygódzki

15

यदि आप जावा में ऐसा कर सकते हैं, तो कोशिश करें:

RuntimeMXBean

ManagementFactory

उदाहरण:

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

1
केवल मान प्रदान करेगा यदि इसे पारित किया गया था, इसलिए कोई डिफ़ॉल्ट सेटिंग्स नहीं।
Behe

8

JConsole कर सकते हैं। इसके अलावा आप एक शक्तिशाली jvisualVM टूल का उपयोग कर सकते हैं, जो 1.6.0.8 के बाद से JDK में भी शामिल है।


2

लिनक्स पर, आप इस कमांड को चला सकते हैं और परिणाम देख सकते हैं:

ps aux | grep "java"

मेरी कंपनी Red Hat Linux का उपयोग करती है और मेरे पास सिस्टम तक बहुत सीमित पहुंच है। ps aux | grep "java" कमांड सभी java कमांड्स को उनके jvm तर्कों के साथ सूचीबद्ध करता है और यदि आवश्यक हो तो हम सटीक jvm तर्क को grep भी कर सकते हैं। यह किसी भी अन्य उपकरण जैसे कि jps, jcmd आदि उपलब्ध / सुलभ नहीं होने की स्थिति में वास्तव में उपयोगी है।
अगहन

1

विंडोज 10 या विंडोज सर्वर 2016 उनके मानक कार्य प्रबंधक में ऐसी जानकारी प्रदान करता है। उत्पादन के लिए एक दुर्लभ मामला है, लेकिन अगर लक्ष्य JVM विंडोज पर चल रहा है, तो इसके मापदंडों को देखने का सबसे सरल तरीका Ctrl + Alt + Delete दबाएं, प्रक्रिया टैब चुनें और कमांड लाइन कॉलम जोड़ें (दाएं माउस बटन पर क्लिक करके) किसी भी मौजूदा कॉलम हेडर)।


1

यदि आप एक रनिंग जावा प्रक्रिया के जेवीएम मापदंडों को प्राप्त करने में रुचि रखते हैं, तो बस -3 जावा-पीआईडी ​​को मारें। आपको एक कोर डंप फ़ाइल मिलेगी जिसमें आप जावा एप्लिकेशन लॉन्च करते समय उपयोग किए जाने वाले जेवीएम पैरामीटर पा सकते हैं।


0

आप उस जानकारी तक पहुंचने के लिए JConsole कमांड (या किसी अन्य JMX क्लाइंट) का उपयोग कर सकते हैं।


0

यह तकनीक स्थानीय या रिमोट से चलने वाले किसी भी जावा एप्लिकेशन के लिए लागू होती है।

  1. अपना जावा एप्लिकेशन प्रारंभ करें।
  2. आप में पाया JVisualVM चलाएं JDK (जैसे C: \ Program Files \ Java \ jdk1.8.0_05 \ bin \ jvisualvm.exe)।
  3. जब यह उपयोगी टूल "स्थानीय" ट्री नोड के तहत जावा एप्लिकेशन चलाने की सूची को देखना शुरू करता है।
  4. डबल क्लिक करें [आपका आवेदन] (पीआईडी ​​[एन])।
  5. दाईं ओर एप्लिकेशन के लिए टैब में निरीक्षण सामग्री होगी। अवलोकन टैब के मध्य में आप आवेदन के लिए JVM तर्क देखेंगे।

jvisualvm JDK 6 अपडेट 7 के बाद से किसी भी JDK में पाया जा सकता है jvisualvm पर वीडियो ट्यूटोरियल यहाँ है।


ओपी ने स्पष्ट रूप से कहा कि jvisualvm एक विकल्प नहीं था।
ओलिवियर गेरार्डिन

0

_JAVA_OPTIONS एक env वेरिएबल है जिसका विस्तार किया जा सकता है।

echo $_JAVA_OPTIONS
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.