मेरे पास इसके लिए एक समाधान है:
यदि आपकी जावा प्रक्रिया फ़ायरवॉल के पीछे लिनक्स पर चल रही है और आप इसे अपने जावा प्रक्रिया के 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
9. एनजॉय # 8-]