क्या कभी किसी को काम करने के लिए रिमोट JMX JConsole मिला है?


120

ऐसा लगता है कि मुझे यह अतीत में काम करने के लिए कभी नहीं मिला है। वर्तमान में, मुझे पता है कि यह काम नहीं करता है।

लेकिन हम अपनी जावा प्रक्रिया शुरू करते हैं:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

मैं पोर्ट को टेलनेट कर सकता हूं, और "कुछ है" और बंदरगाह।

ऐसा लगता है कि यह इतना सरल होना चाहिए, लेकिन कोई त्रुटि नहीं, कोई शोर नहीं, कुछ भी नहीं। बस काम नहीं करता है।

किसी को भी इस के लिए गर्म टिप पता है?


3
यदि आप टॉमकैट का उपयोग कर रहे हैं तो यह समाधान हो सकता है: stackoverflow.com/questions/1263991/…
हाजो थेलेन

5
क्या आप यहाँ कुछ स्वीकार करना भूल गए?
ग्रे अप

जवाबों:


126

मेरे पास इसके लिए एक समाधान है:

यदि आपकी जावा प्रक्रिया फ़ायरवॉल के पीछे लिनक्स पर चल रही है और आप इसे अपने जावा प्रक्रिया के JMX पोर्ट से कनेक्ट करने के लिए अपने स्थानीय मशीन पर विंडोज पर JConsole / Java VisualVM / Java मिशन कंट्रोल शुरू करना चाहते हैं ।

आपको SSH लॉगिन के माध्यम से अपने लिनक्स मशीन तक पहुंच की आवश्यकता है। सभी संचार SSH कनेक्शन पर सुरंग किए जाएंगे।

सुझाव: यह समाधान काम करता है अगर कोई फ़ायरवॉल है या नहीं।

नुकसान: हर बार जब आप अपनी जावा प्रक्रिया को फिर से शुरू करते हैं, तो आपको फिर से 4 - 9 से सभी चरणों को करने की आवश्यकता होगी।


1. आपको यहाँ से अपने विंडोज मशीन के लिए पोटीन सूट की आवश्यकता है:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

कम से कम putty.exe


2. एक नि: शुल्क पोर्ट परिभाषित करें अपने linux मशीन पर:

<jmx-remote-port>

उदाहरण:

jmx-remote-port = 15666      


3. linux मशीन पर java प्रक्रिया में तर्क जोड़ें

इसे ठीक इसी तरह किया जाना चाहिए। यदि नीचे की तरह किया जाता है, तो यह फायरवॉल के पीछे लिनक्स मशीनों के लिए काम करता है (यह -Djava.rmi.server.hostname=localhostतर्क का कारण बनता है)।

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

उदाहरण:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main


4. अपने जावा प्रोसेस की प्रोसेस-आईडी प्राप्त करें

ps -ef | grep <java-processname>

result ---> <process-id>

उदाहरण:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5. RMIServer स्टब्स डाउनलोड के लिए मनमाना पोर्ट खोजें

जावा प्रक्रिया लाइनक्स मशीन पर एक नया टीसीपी पोर्ट खोलती है, जहां आरएमआई सर्वर-स्टब्स डाउनलोड के लिए उपलब्ध होंगे। यह पोर्ट जावा वर्चुअल मशीन से कनेक्शन प्राप्त करने के लिए SSH टनल के माध्यम से भी उपलब्ध होना चाहिए।

netstat -lpइस बंदरगाह के साथ यह भी lsof -iसंकेत मिलता है कि क्या बंदरगाह जावा प्रक्रिया के रूप में खोला गया है।

नोट: जब जावा प्रक्रिया शुरू होती है तो यह पोर्ट हमेशा बदलता रहता है।

netstat -lp | grep <process-id>

tcp        0      0 *:<jmx-remote-port>     *:*     LISTEN      24321/java
tcp        0      0 *:<rmi-server-port>     *:*     LISTEN      24321/java


result ---> <rmi-server-port>

उदाहरण:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6. पोटीन के साथ अपने विंडोज मशीन से दो एसएसएच-सुरंगों को सक्षम करें

Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local       
[x] Auto       

Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local       
[x] Auto

उदाहरण:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


पोटीन के माध्यम से एक एसएसएल सुरंग खोलने के लिए सेटिंग्स


7. इस SSH- सुरंग सक्षम के साथ पोटीन के साथ अपने लिनक्स मशीन में लॉगिन करें।

पोटीन सेशन को खुला छोड़ दें।

जब आप लॉग इन होते हैं, तो पुट्टी एसएसपी पोर्ट 22 पर लिनक्स मशीन के लिए सभी टीसीपी-कनेक्शनों को सुरंग देगा।

JMX पोर्ट:

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer-स्टब पोर्ट:

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8. निम्नलिखित URL का उपयोग करके अपने जावा प्रोसेस से कनेक्ट करने के लिए JConsole / Java VisualVM / Java मिशन कंट्रोल शुरू करें

यह काम करता है, JConsole / Java VisualVM / Java मिशन कंट्रोल के कारण आपको लगता है कि आप अपने स्थानीय विंडोज मशीन पर पोर्ट से कनेक्ट करते हैं। लेकिन पोटीन ने सभी पेलोड को आपके लिनक्स मशीन को पोर्ट 15666 पर भेज दिया।

लाइनक्स मशीन पर पहले जावा प्रक्रिया जवाब देती है और आरएमआईएसवर पोर्ट को वापस भेजती है। इस उदाहरण में 37123।

फिर JConsole / Java VisualVM / Java मिशन कंट्रोल को लगता है कि यह लोकलहोस्ट से जुड़ता है: 37123 और पोटीन पूरे पेलोड को लाइनक्स मशीन के आगे भेज देगा।

जावा प्रक्रिया उत्तर और कनेक्शन खुला है।

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

उदाहरण:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


Jmx सेवा url के माध्यम से कनेक्ट करें


9. एनजॉय # 8-]


1
यहाँ बस एक छोटा सा सवाल - बिना rmi के JMX कनेक्शन करना संभव नहीं है?
कुमार वैभव

5
मुझे एक संकेत मिला, कि हम एक निश्चित पोर्ट संख्या के लिए एक rmi.port सेट कर सकते हैं, इसलिए हम RMIServer स्टब्स डाउनलोड के लिए मनमाना पोर्ट सेट कर सकते हैं। यह जावा संपत्ति "com.sun.management.jmxremote.rmi.port = <rmi-server-port>" के साथ काम करना चाहिए। यह Oracle जावा वीएम में एक अनिर्दिष्ट सुविधा की तरह दिखता है।
सुशीकट्टा

1
निश्चित
कीस्टोर्स

एक ही प्रक्रिया है, लेकिन मैं ऐसी कोई वस्तु में टेबल मिल गया
wener

2
@ सुशीकट्टा आप अपने जवाब में, इसके काम को पूरी तरह से ठीक करने के लिए इस संकेत को जोड़ सकते हैं, और 4 से 6 तक के चरणों को हटा सकते हैं, पकड़ यह है कि आपके अग्रेषित पोर्ट को मूल पोर्ट के समान होना चाहिए और जेएमएक्स और आरएमआई पोर्ट दोनों को भी करना होगा वही
जर्जर

80

-Djava.rmi.server.hostname='<host ip>'मेरे लिए इस समस्या को हल करना जोड़ना ।


2
मेरे मामले में मुझे IP पता (-Djava.rmi.server.hostname = <ip>) जोड़ना होगा। hostname -i ने मुझे दो आईपी पते दिए और सूची में दूसरा सही था।
बजे जॉर्जी बोल्युबा

4
मेरे लिए समस्या हल नहीं हुई। Windows-2-windows को कनेक्ट करना मेरे लिए कोई समस्या नहीं है, लेकिन जब मैं Oracle JDK 1.6.024 के साथ SUSE पर चल रही जावा सेवा की निगरानी करने के लिए Windows पर JVM Jvisualvm.exe से कनेक्ट करने का प्रयास करता हूं, तो यह कनेक्शन को विफल कर देता है। इस कारण से मुझे लगता है कि यह व्यक्ति प्रश्न अभी भी अनुत्तरित है।
djangofan

इससे मेरे लिए समस्या हल हो गई। यह सामान्य 3 (प्रमाणिक / पोर्ट / एसएसएल) सेट है और मैं अब दूरस्थ रूप से कनेक्ट कर सकता हूं। बॉक्स कई वर्चुअल इंटरफेस पर सुन रहा है, हालांकि हो सकता है कि मेजबान को निर्दिष्ट करने के लिए jvm को भ्रमित न किया गया हो।
निकोली २३'११

अंत में मेरी ऑक्स लैपटॉप पर जंकसोल को जोड़ने वाली मेरी समस्याओं को हल किया। धन्यवाद।
राडो

मेरे लिए काम किया। धन्यवाद!
जेफ

58

जावा 8 और नए संस्करणों के साथ प्रयास किया

यह समाधान फायरवॉल के साथ भी अच्छा काम करता है

1. रिमोट-होस्ट पर अपने जावा स्टार्टअप स्क्रिप्ट में इसे जोड़ें:

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

2. अपने कंप्यूटर पर इसे निष्पादित करें।

  • विंडोज उपयोगकर्ता :

    putty.exe -ssh user@remote-host -L 1616:remote-host:1616

  • लिनक्स और मैक उपयोगकर्ता :

    ssh user@remote-host -L 1616:remote-host:1616

3. jconsoleअपने कंप्यूटर पर शुरू करें

jconsole localhost:1616

4. मज़ा आ गया!

पुनश्च: चरण 2 के दौरान, आप sshऔर -Lआप निर्दिष्ट करते हैं कि पोर्ट 1616 को स्थानीय (क्लाइंट) होस्ट को दूरस्थ पक्ष में भेजा जाना चाहिए। यह एक ssh सुरंग है और फ़ायरवॉल या विभिन्न नेटवर्क समस्याओं से बचने में मदद करता है।


1
बहुत बढ़िया!! 6 + घंटे के लिए कोशिश कर रहा jm8 पर एक ActiveMQ उदाहरण के लिए अब jmx- रिमोट। अंतिम रूप से काम कर रहा है !! धन्यवाद! :)
रोप'

धन्यवाद, आप की तरह मैंने भी एक दिन के लिए संघर्ष किया, और इतने काम के बाद मैंने बस सोचा: "मुझे यह बात लिखनी होगी एसओ !!"
फ्रीवेव

2
वास्तव में बेकार है कि ओरेकल "com.sun.management.jmxremote.rmi.port", " java.rmi.server.hostname " docs.oracle.com/javase/8/docs/technotes/guides/management/… I का उल्लेख नहीं करता है लगता है कि मेरा मुद्दा था।
रोप

क्योंकि, AFAIK, यह समस्या JMX के बारे में नहीं है, लेकिन RMI कैसे काम करती है। उदाहरण के लिए, इस मामले के बाद, मुझे जेमीटर के साथ एक ही समस्या थी, जो इसके क्लाइंट / सर्वर कार्यान्वयन में rmi का उपयोग करते हैं।
स्वतंत्रता दिवस

2
यह काम करता हैं। सुरंगों के साथ अपने अनुभव को जोड़ते हुए: 1) "-एलएच 1616" में उपयोग कर सकते हैं -एल 1616: लोकलहोस्ट: 1616 "2) स्रोत पोर्ट को बदल नहीं सकते, अर्थात यह काम नहीं करेगा:" -L 9999: लोकलहोस्ट: 1616 "
गार्गी

19

आप शायद फ़ायरवॉल के साथ किसी समस्या का सामना कर रहे हैं। 'समस्या' यह है कि आपके द्वारा निर्दिष्ट पोर्ट केवल उपयोग किया जाने वाला पोर्ट नहीं है, यह RMI के लिए 1 या शायद 2 और पोर्ट का उपयोग करता है, और वे संभवतः फ़ायरवॉल द्वारा अवरुद्ध हैं।

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

एक ऐसा उपाय है जिसके लिए बहुत सारे पोर्ट खोलने की आवश्यकता नहीं है, लेकिन मैंने इसे संयुक्त स्रोत स्निपेट और टिप्स का उपयोग करके काम करने के लिए दिया है।

http://forums.sun.com/thread.jspa?threadID=5267091 - लिंक अब काम नहीं करता है

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

यह भी संभव है एक ssh सुरंग सेटअप और अभी भी यह काम करने के लिए :-)


2
मैं यहाँ केवल एक और उत्तर में उल्लेखित के रूप में -Djava.rmi.server.hostver- सेटिंग के साथ-साथ बस gengen.com/2010/2010/jconsole-via-socks-ssh-tunnel.html में वर्णित केवल उर्फ ​​का उपयोग करके काम करने में सक्षम था ।
डेमियन

भविष्य के पाठकों पर ध्यान दें: लिंक forums.sun.comटूट गया है
सीडीस्पेस

1
भविष्य के पाठकों के लिए ध्यान दें: लिंक blogs.oracle.comटूट गया है।
ग्रिललॉक

17

पिछले कुछ दिनों के लिए परीक्षण में अपना Google-फू डालने के बाद, मैं अंततः स्टैक ओवरफ्लो के उत्तर संकलन के बाद काम करने में सक्षम हो गया और इस पृष्ठ http://help.boomi.com/atomsphere/GUID-F78748C- 53C8-4662-AA06-8B1D32F9D55B.html

डेल बोओमी पृष्ठ से रिपॉस्टिंगिंग:

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the <atom_installation_directory>\bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

एक पंक्ति जिसे मैंने कोई स्टैक ओवरफ्लो उत्तर कवर नहीं देखा है, वह है

-Dcom.sun.management.jmxremote.rmi.port=5002

मेरे मामले में, मैं काकफा मैट्रिक्स को पुनः प्राप्त करने का प्रयास कर रहा था, इसलिए मैंने -Dcom.sun.management.jmxremote.portमूल्य से मिलान करने के लिए बस उपरोक्त विकल्प को बदल दिया । इसलिए, किसी भी प्रकार के प्रमाणीकरण के बिना, नंगे न्यूनतम विन्यास इस तरह दिखना चाहिए:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)

1
प्लस "Google-फू" के लिए
kevinarpe

"com.sun.management.jmxremote.rmi.port" मेरे लिए भी महत्वपूर्ण था। इस उत्तर को भी देखें: stackoverflow.com/a/22306586/123205
डेविड

मुझे "com.sun.management.jmxremote.local.only" की आवश्यकता नहीं थी, इसलिए मुझे नहीं लगता कि आपका कॉन्फ़िगरेशन वास्तव में "नंगे न्यूनतम" है
David


7

Sushicutta के स्टेप्स 4-7 को निम्न चरण 3 में जोड़कर छोड़ दिया जा सकता है:

-Dcom.sun.management.jmxremote.rmi.port=<same port as jmx-remote-port>

उदाहरण के लिए स्टार्ट अप पैरामीटर जोड़ें:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

पोर्ट फ़ॉरवर्डिंग के लिए, कनेक्ट करके उपयोग करें:

ssh -L 12345:localhost:12345 <username>@<host>

यदि आपका होस्ट एक स्टेपिंग स्टोन है, तो बस स्टेप स्टोन के ऊपर दिए गए पोर्ट को आगे बढ़ाकर पोर्ट को चेन करें:

ssh -L 12345:localhost:12345 <username>@<host2>

यह ध्यान रखें कि होस्टनाम = लोकलहोस्ट को यह सुनिश्चित करने की आवश्यकता है कि jmxremote सुरंग का उपयोग करने के लिए rmi कनेक्शन को बता रहा है। अन्यथा यह निर्देशन को जोड़ने और फ़ायरवॉल को हिट करने का प्रयास कर सकता है।


यह तरीका मेरी मदद करता है: (1) मैं मिस्ड JMX पैरामीटर और रिस्टार्ट ऐप जोड़ता हूं (2) फिर ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host> लोकल मशीन पर रन करता हूं (3) फिर मैं रिमोट JMX से कनेक्ट करता हूं: jconsole <remote_host>:<JMX_port>
Rib47

6

प्रो टिप:

RMI पोर्ट को मनमाने ढंग से पोर्ट्नर में खोला जाता है। यदि आपके पास एक फ़ायरवॉल है और आप बंदरगाहों को 1024-65535 (या वीपीएन का उपयोग करना) नहीं खोलना चाहते हैं, तो आपको निम्न कार्य करने की आवश्यकता है।

आपको RMI रजिस्ट्री और JMX / RMI सर्वर पोर्ट के रूप में (एक ज्ञात संख्या होने में) को ठीक करने की आवश्यकता है। आप लिबर-डायर में और सर्वर के तहत एक विशेष श्रोता को कॉन्फ़िगर करने के लिए जार-फाइल (कैटालिना-जेएमएक्स-रिमोट। के अतिरिक्त में है) डालकर ऐसा करते हैं:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(और जेएमएक्स को सक्रिय करने के लिए सामान्य झंडे को टोके

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

देखें: http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html पर JMX रिमोट लाइफसाइकल श्रोता

फिर आप इस भयावह URL का उपयोग करके कनेक्ट कर सकते हैं:

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

उपरोक्त w / अतिरिक्त जार की कोशिश की, और RMI बंदरगाहों को निर्दिष्ट के रूप में सुनते हुए देख सकते हैं, लेकिन RVM द्वारा VisualVM के साथ JVM पोर्ट से कनेक्ट होने के बाद भी यादृच्छिक पोर्ट का उपयोग किया जाता है। वर्कअराउंड: 'lsof -i' के साथ बंदरगाहों के लिए देखें और अवरुद्ध कनेक्शन वाले लोगों को खोलें।
जोसेफ वासना

5

जांचें कि आपका सर्वर फ़ायरवॉल के पीछे है या नहीं। जेएमएक्स आरएमआई पर आधारित है, जो शुरू होने पर दो पोर्ट खोलते हैं। एक रजिस्टर पोर्ट है, डिफ़ॉल्ट 1099 है, और com.sun.management.jmxremote.portविकल्प द्वारा निर्दिष्ट किया जा सकता है। अन्य डेटा संचार के लिए है, और यादृच्छिक है, जो समस्या का कारण है। एक अच्छी खबर यह है कि, JDK6 से, इस यादृच्छिक पोर्ट को com.sun.management.jmxremote.rmi.portविकल्प द्वारा निर्दिष्ट किया जा सकता है।

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

4

फ़ायरवॉल के माध्यम से जेएमएक्स प्राप्त करना वास्तव में कठिन है। समस्या यह है कि मानक RMI दूसरे यादृच्छिक असाइन किए गए पोर्ट (RMI रजिस्ट्री के पास) का उपयोग करता है।

हमारे पास तीन समाधान हैं जो काम करते हैं, लेकिन हर मामले में एक अलग की जरूरत है:

  1. Socks प्रॉक्सी के साथ SSH टनल के ऊपर JMX, SSH मैजिक के साथ मानक RMI का उपयोग करता है http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. जेएमएक्स एमपी (मानक आरएमआई के विकल्प), केवल एक निश्चित पोर्ट का उपयोग करता है, लेकिन सर्वर और क्लाइंट http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/ पर एक विशेष जार की आवश्यकता होती है

  3. JMX सर्वर फॉर्म कोड शुरू करें, वहां मानक RMI का उपयोग करना और एक निश्चित दूसरे पोर्ट का उपयोग करना संभव है: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055


अन्य सभी उत्तर इस के लिए एक जोड़ होना चाहिए
ruruskyi

2

दूरस्थ JMX समस्याओं का परीक्षण / डीबगिंग / निदान करते समय , पहले नेटवर्क और अन्य गैर-JMX विशिष्ट समस्याओं को नियंत्रित करने के लिए हमेशा उसी होस्ट से कनेक्ट करने का प्रयास करें जिसमें MBSSverver (यानी लोकलहोस्ट) शामिल हो।


2

यहां पहले से ही कुछ शानदार जवाब हैं, लेकिन, थोड़ा सरल तरीका है कि मुझे लगता है कि यह साझा करने लायक है।

sushicutta का दृष्टिकोण अच्छा है, लेकिन बहुत ही मैनुअल है क्योंकि आपको हर बार RMI पोर्ट प्राप्त करना होता है। शुक्र है, हम पोर्ट सुरंगों को स्पष्ट रूप से खोलने के बजाय एक SOCKS प्रॉक्सी का उपयोग करके काम कर सकते हैं। इस दृष्टिकोण के नकारात्मक पक्ष JMX ऐप है जिसे आप अपनी मशीन पर चलाते हैं एक प्रॉक्सी का उपयोग करने के लिए कॉन्फ़िगर करने में सक्षम होने की आवश्यकता है। अधिकांश प्रक्रियाएँ आप इसे जावा गुण जोड़ने से कर सकते हैं, लेकिन, कुछ ऐप इसका समर्थन नहीं करते हैं।

कदम:

  1. अपनी दूरस्थ जावा सेवा के लिए स्टार्टअप स्क्रिप्ट में JMX विकल्प जोड़ें:

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. अपने दूरस्थ मशीन के लिए SOCKS प्रॉक्सी कनेक्शन सेट करें:

    ssh -D 9696 user@remotemachine.com
    
  3. SOCKS प्रॉक्सी (localhost: 9696) का उपयोग करने के लिए अपने स्थानीय जावा मॉनिटरिंग ऐप को कॉन्फ़िगर करें। नोट: आप इसे कभी-कभी कमांड लाइन से कर सकते हैं , अर्थात:

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    

2

निम्नलिखित ने मेरे लिए काम किया (हालाँकि मुझे लगता है कि पोर्ट 2101 का वास्तव में इसमें कोई योगदान नहीं था):

-Dcom.sun.management.jmxremote.port=2100
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=2101
-Djava.rmi.server.hostname=<IP_ADDRESS>OR<HOSTNAME>

मैं एक रिमोट मशीन से एक सर्वर से कनेक्ट कर रहा हूं जिसमें डॉकर चल रहा है और प्रक्रिया कंटेनर के अंदर है। इसके अलावा, मैंने फ़ायरवॉल को बंद कर दिया, लेकिन मुझे नहीं लगता कि यह मुद्दा था क्योंकि मैं फ़ायरवॉल को खोलने के साथ 2100 तक भी टेलनेट कर सकता था। आशा करता हूँ की ये काम करेगा।


1

मैं लिनक्स Redhat ES3 को चलाने के लिए Windows हुकिंग पर JConsole / JVisualVm चला रहा हूं।

निम्नलिखित कमांड का उपयोग करके पैकेट फ़िल्टरिंग को अक्षम करने से मेरे लिए चाल चली गई:

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

जहाँ jconsole- होस्ट या तो होस्टनाम या होस्ट एड्रेस है, जिस पर JConsole चलता है और jmxremote- पोर्ट, com.sun.management.jmxremote.port के लिए दूरस्थ प्रबंधन के लिए निर्धारित पोर्ट नंबर है।


2
SUSE अमेज़न EC2 उदाहरण पर मेरे लिए काम नहीं किया। मुझे लगता है कि समस्या कहीं और है।
djangofan

1

मैं टॉमकैट के साथ डॉक कंटेनर चलाने के लिए boot2docker का उपयोग कर रहा हूं और मुझे एक ही समस्या है, इसका समाधान यह था:

  • जोड़ना -Djava.rmi.server.hostname=192.168.59.103
  • उदाहरण के लिए, मेजबान और डॉक कंटेनर में समान JMX पोर्ट का उपयोग करें docker run ... -p 9999:9999 ...:। विभिन्न बंदरगाहों का उपयोग करने से काम नहीं चलता है।

0

आपको यह भी सुनिश्चित करने की आवश्यकता है कि आपका मशीन का नाम उस आईपी को हल करता है जो JMX के लिए बाध्यकारी है; न लोकलहोस्ट न ही 127.0.0.1। मेरे लिए, इसने मेजबान में एक प्रविष्टि डालने में मदद की है जो स्पष्ट रूप से इसे परिभाषित करता है।


0

फ़ायरवॉल के माध्यम से जेएमएक्स प्राप्त करना उतना कठिन नहीं है। एक छोटी सी पकड़ है। आपको अपने JMX कॉन्फ़िगर किए गए पोर्ट यानी दोनों को फॉरवर्ड करना होगा। 9010 और डायनेमिक पोर्ट्स में से एक मेरी मशीन पर सुनता है यह 30000 था


0

ये मेरे लिए काम करने वाले कदम हैं (सर्वर साइड पर फ़ायरवॉल के पीछे डेबियन, मेरे स्थानीय मैक से वीपीएन तक पहुंच गया):

सर्वर आईपी की जाँच करें

hostname -i

JVM परम का उपयोग करें:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[jmx port]
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=[server ip from step 1]

एप्लिकेशन चलाएं

चल जावा प्रक्रिया के pid का पता लगाएं

JMX / RMI द्वारा उपयोग किए जाने वाले सभी पोर्ट की जाँच करें

netstat -lp | grep [pid from step 4]

फ़ायरवॉल पर चरण 5 से सभी पोर्ट खोलें

देखा।


0

एक योगदान करने के लिए, यह मैंने टॉमकैट 6 के लिए सेंटोस 6.4 पर किया।

  1. शटडाउन iptables सेवा

    service iptables stop
    
  2. निम्न पंक्ति को tomcat6.conf में जोड़ें

    CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8085 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[host_ip]"
    

इस तरह मैं JConsole का उपयोग करके किसी अन्य पीसी से कनेक्ट करने में सक्षम था।


0

मैं एक दूरस्थ सर्वर पर NiFi को प्रोफाइल करने के लिए JMC को फ्लाइट रिकॉर्डर (JFR) चलाने की कोशिश कर रहा हूं जो कि JMC चलाने के लिए एक ग्राफिकल वातावरण प्रदान नहीं करता है।

यहाँ दिए गए अन्य उत्तरों के आधार पर, और बहुत परीक्षण और त्रुटि के बाद, यहाँ मैं JVM ( conf / bootstrap.conf ) की आपूर्ति कर रहा हूँ जब मैं NiFi लॉन्च करता हूँ:

java.arg.90=-Dcom.sun.management.jmxremote=true
java.arg.91=-Dcom.sun.management.jmxremote.port=9098
java.arg.92=-Dcom.sun.management.jmxremote.rmi.port=9098
java.arg.93=-Dcom.sun.management.jmxremote.authenticate=false
java.arg.94=-Dcom.sun.management.jmxremote.ssl=false
java.arg.95=-Dcom.sun.management.jmxremote.local.only=false
java.arg.96=-Djava.rmi.server.hostname=10.10.10.92  (the IP address of my server running NiFi)

मैंने इसे / etc / मेजबानों में रखा , हालांकि मुझे संदेह है कि इसकी आवश्यकता है:

10.10.10.92   localhost

फिर, जेएमसी को लॉन्च करने पर, मैं इन संपत्तियों के साथ एक दूरस्थ संबंध बनाता हूं:

Host: 10.10.10.92
Port: 9098
User: (nothing)
Password: (ibid)

संयोग से, यदि मैं कस्टम JMX सेवा URL पर क्लिक करता हूं, तो मैं देखता हूं:

service:jmx:rmi:///jndi/rmi://10.10.10.92:9098/jmxrmi

यह आखिरकार मेरे लिए किया।

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