JMX URL की व्याख्या करें


80

मैं एक JMX सेवा URL को समझने की कोशिश कर रहा हूं।

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi

यह बहुत अच्छा होगा, अगर कोई मुझे यह समझने में मदद कर सकता है।

धन्यवाद


जवाबों:


106

मैं इस प्रश्न के लिए पहले लिखे गए उत्तर का पुन: उपयोग करूंगा: Java6 में जोंको कंसोल के माध्यम से टॉमकैट के एमबीसर्वर से कनेक्ट नहीं कर सकता

यह पूर्ण नहीं है, लेकिन इससे मदद मिल सकती है:

मान लीजिए आप JMX सर्वर (उर्फ 'JMX एजेंट' उर्फ 'JVM आप कनेक्ट करना चाहते हैं') के साथ 'लक्षित मशीन' पर चल रहा RMI रजिस्ट्री बंदरगाह 'RMI रजिस्ट्री पोर्ट' पर और JMX RMI सर्वर पोर्ट 'JMX RMI पर सर्वर पोर्ट'।

ध्यान दें:

  1. RMI रजिस्ट्री JMX ग्राहकों जहां खोजना है JMX RMI सर्वर पोर्ट ; जानकारी कुंजी के तहत प्राप्त की जा सकती है jmxrmi
  2. RMI रजिस्ट्री बंदरगाह आम तौर पर के रूप में यह JVM स्टार्टअप पर सिस्टम गुण के माध्यम से सेट किया गया है जाना जाता है।
  3. JMX RMI सर्वर पोर्ट आम तौर पर किया जाता है नहीं जाना जाता JVM यादृच्छिक पर यह चुनता है के रूप में (कोई अन्य सावधानियां बरती रहे हैं)।

निम्नलिखित यूआरआई सफल कनेक्शन (परीक्षण) को जन्म देगा

service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

यह बुरा लग रहा है। इसे अलग काट दो।

यह URI एक RFC2609 "सेवा स्थान प्रोटोकॉल URL" है (ठीक है, यह वास्तव में एक URI है, ठीक है?)

यह इससे बना है:

  • service - निरंतर
  • jmx:rmi- सेवा प्रकार से बना है: सार प्रकार jmx और URL योजना rmi
  • बाकी - एसएपी (सेवा पहुंच प्रोटोकॉल विनिर्देश)

सैप में विघटित होता है:

  • //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT> - ipsite
  • /jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - URL हिस्सा

एक अच्छी तरह से सूचित जेएमएक्स ग्राहक जेएमएक्स-ओवर-आरएमआई एक्सचेंज करने के लिए "ipsite" से जुड़ता है; लेकिन JMX क्लाइंट का क्या है जो उस पोर्ट को नहीं जानता है? धीरज...

URL भाग में विघटित हो गया है:

  • /jndi/ - यह JMX क्लाइंट को यह बताने के लिए लगता है कि यह उस स्थान पर लुकअप जानकारी प्राप्त कर सकता है
  • rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - हां, हमें JMIX RMI सर्वर के बारे में RMI रजिस्ट्री में लुकअप कुंजी के तहत जानकारी मिलती है jmxrmi

यह कुछ हद तक कार्ट-से-घोड़ा है, क्योंकि किसी को पहले SLP URL के बाद वाले भाग द्वारा दी गई RMI रजिस्ट्री से संपर्क करना होता है ।

सिर खुजाने के बाद, सहजता से, आइए कोशिश करें:

service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

हाँ, वह काम करता है! JMX RMI सर्वर पोर्ट अच्छी तरह से रजिस्ट्री से प्राप्त होता है। दूसरे विचारों पर, लक्ष्य मशीन को रजिस्ट्री से भी प्राप्त किया जाना चाहिए, इस प्रकार:

service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

और भी बेहतर, वह काम करता है!

संदर्भ:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gadg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

7

समझाना:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
  1. service:jmx:rmi://192.168.30.10:1234- कहते हैं कि आईपी एड्रेस 192.168.30.10 के साथ मशीन पर एक जेएमएक्स एजेंट है। जेएमएक्स एजेंट आरएमआई पर मूल रूप से जेएमएक्स सेवा (एस) प्रदान करने के लिए (टीसीपी) पोर्ट 1234 का उपयोग कर रहा है (मूल रूप से आरएमआई सर्वर के रूप में कार्य करता है)।
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi - कहते हैं कि RMI पर JMX एजेंट के साथ बातचीत करने के लिए RMI को RMI रजिस्ट्री में पाया जा सकता है जो IP पते 192.168.30.10 के साथ मशीन पर चल रहा है और (TCP) पोर्ट 2344 का उपयोग कर रहा है। RMI स्टब प्राप्त करने के लिए आपको चाहिए "jmxrmi" बंधन देखना।

पिछले उत्तर बताते हैं कि URL का दूसरा भाग JMX RMI सर्वर के सर्वर पोर्ट को प्राप्त करना है। वह सही नहीं है। JMX RMI सर्वर पोर्ट (TCP) 1234 है और URL का हिस्सा है। आरएमआई रजिस्ट्री से आपको जो मिलता है वह आरएमआई स्टब ( javax.management.remote.rmi.RMIServerImpl_Stub) है जिसका उपयोग आप आरएमआई पर जेएमएक्स एजेंट (एमबीएन सर्वर) से बात करने के लिए कर सकते हैं।

उम्मीद है की यह मदद करेगा।


चूंकि आप बता रहे हैं कि @ david-tonhofer द्वारा उत्तर सही नहीं है, तो क्या आप यह बता सकते हैं कि 1 IP: पोर्ट जोड़ी ( 192.168.30.10:1234इस उदाहरण में) फ़ंक्शन के बिना यूआरएल कैसे हैं ? यानी, जो URL से शुरू होते हैं service:jmx:rmi:///jndi/rmi:। इसका कारण यह है कि यह सामान्य रूप से इतना भ्रामक है कि जब हम JVM शुरू करते समय एक jmx पोर्ट निर्दिष्ट करते हैं, तो यह कहीं भी RMI का संदर्भ नहीं देता है -Dcom.sun.management.jmxremote.port=2344:। (ध्यान दें कि मेरे अनुभव में कि jmxremote पोर्ट URL के "RMI रजिस्ट्री" भाग से जुड़ा है, न कि "JMX RMI सर्वर" भाग।)
erik.weathers

आईपी ​​और पोर्ट को निर्दिष्ट करने के कई तरीके हैं जो जेएमएक्स एजेंट का उपयोग करेगा। यदि आप इसे किसी विशिष्ट आईपी और पते पर ठीक करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं service:jmx:rmi://192.168.30.10:1234। वैकल्पिक रूप से आप com.sun.management.—गुणों का उपयोग कर सकते हैं । एक URL का उपयोग करें जैसे service:jmx:rmi:///…कि जावा को आईपी लेने दें और आपके लिए पोर्ट करें (अनियमित रूप से या सिस्टम गुणों पर आधारित)। service:jmx:rmi://0.0.0.0:1234सभी इंटरफेस पर पोर्ट 1234 को बांधने के लिए URL का उपयोग करें । और इसी तरह। उम्मीद है की यह मदद करेगा।
प्रोलेन्सर

4

Javax.management.remote.rmi के अनुसार

इस तरह इस यूआरएल को इकट्ठा किया जाता है

service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname

4
मुझे लगता है कि वह पूछ रहा है कि इसे इतना जटिल बनाने की आवश्यकता क्यों है।
djangofan 19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.