Jconsole দিয়ে অ্যাক্সেসের জন্য কীভাবে আমার JVM এ JMX সক্রিয় করবেন?


223

Jconsole দিয়ে অ্যাক্সেসের জন্য কীভাবে JVX এ JMX সক্রিয় করবেন?


32
এটি অনুমোদিত, এবং আসলে এটি আমার জন্য কেবলমাত্র একটি অনুস্মারক, কারণ আমি সর্বদা ভুলে যাই যেখান থেকে প্যারামিটারগুলি অনুলিপি করা উচিত এবং এখন আমি জানি কোথায় এটি পেয়েছি :-)
মৌলি

20
: স্ট্যাক এক্সচেঞ্জ সবসময় স্পষ্টভাবে তাদের নিজস্ব প্রশ্নের উত্তর করার জন্য ব্যবহারকারীদের উৎসাহিত করেছে, এখানে দেখতে stackoverflow.com/help/self-answer
টিম Buthe

11
আমি একাধিকবার এসও অনুসন্ধান করেছি এবং একটি প্রশ্নের উত্তর পেয়েছি ... নিজেই। এবং এর মধ্যে একটি আমার পাশাপাশি জিজ্ঞাসা করেছিল। এ কারণেই নিজের নিজের উত্তরগুলি রাখা ভাল Also এছাড়াও, আপনার সমস্যার মুখোমুখি হওয়া অন্যান্য সমস্ত লোকদের সম্পর্কেও ভাবুন, যদি আপনি আপনার প্রশ্নের উত্তর দেন তবে আপনি তাদেরও সহায়তা করবেন।
মাইক মিলার

2
জাভা 8-র জন্য আপডেট হওয়া ডকটি এখানে রয়েছে
অ্যান্ড্রু জনস্টন

@ মাউরেন: আপনি নিজের উত্তর দিয়েছিলেন এমন বদ্ধ প্রশ্নের উত্তর দিতে পারবেন? এটি মেটা নিয়ে আলোচনা করার মতো হতে পারে।
কেভিনার্পে

উত্তর:


290

সম্পর্কিত ডকুমেন্টেশন এখানে পাওয়া যাবে:

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

নিম্নলিখিত পরামিতিগুলি দিয়ে আপনার প্রোগ্রামটি শুরু করুন:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.rmi.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

উদাহরণস্বরূপ:

java -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9010 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -jar Notepad.jar

-Dcom.sun.management.jmxremote.local.only=falseঅগত্যা প্রয়োজনীয় নয় তবে এটি ছাড়া এটি উবুন্টুতে কাজ করে না। ত্রুটিটি এরকম কিছু হবে:

01 Oct 2008 2:16:22 PM sun.rmi.transport. customer .TCPTransport$AcceptLoop executeAcceptLoop
WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=37278] throws
java.io.IOException: The server sockets created using the LocalRMIServerSocketFactory only accept connections from clients running on the host where the RMI remote objects have been exported.
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:89)
    at sun.rmi.transport. customer .TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
    at sun.rmi.transport. customer .TCPTransport$AcceptLoop.run(TCPTransport.java:359)
    at java.lang.Thread.run(Thread.java:636)

দেখতে http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6754672

-Dcom.sun.management.jmxremote.authenticate=falseযে কারও জন্য অ্যাক্সেস উপলব্ধ করে তোলে সে সম্পর্কেও সতর্কতা অবলম্বন করুন , তবে আপনি যদি কেবল এটির স্থানীয় মেশিনে জেভিএম ট্র্যাক করতে ব্যবহার করেন তবে তাতে কিছু আসে যায় না।

আপডেট :

কিছু ক্ষেত্রে আমি সার্ভারে পৌঁছতে পারিনি। এটি ঠিক করা হয়েছিল যদি আমি এই পরামিতিটিও সেট করে থাকি:-Djava.rmi.server.hostname=127.0.0.1


9
-Dcom.sun.management.jmxremote.local.only = মিথ্যা এখন
সেন্টোতেও দরকার

1
নীট বাছাই: এটি আমার কাছে অদ্ভুত যেটির com.sun.management.jmxremoteডিফল্ট মান রয়েছে true। (আপনাকে ধন্যবাদ সূর্যের!) অতি পরিষ্কার হয়ে উঠতে, বিশেষত জেএমএক্স নোবসের সাথে কম পরিচিত তাদের জন্য, আমি ব্যবহার করি: com.sun.management.jmxremote=trueরেফ: ডকস.ওরকল
জাভাসে

1
"-জাজা.আরমি.সার্ভার হস্টনস্ট" আমার জন্য কবজির মতো কাজ করেছিল!
অরহুন ডি

1
লোকালহোস্টে হোস্টনাম সেট করা খুব গুরুত্বপূর্ণ যদি আপনি এসএসএইচ টানেলের মাধ্যমে কোনও রিমোট সার্ভারের সাথে সংযোগ স্থাপনের চেষ্টা করছেন, যা খুব সাধারণ ঘটনা।
নিখিল ওওয়ালেকার

1
এটি কেবলমাত্র যদি আমি সার্ভারে ফায়ারওয়ালটি অক্ষম করি তবেই কাজ করে। আমি অবশ্যই এই উদাহরণটিতে 9010 / tcp বন্দরটি চালু করেছিলাম, আমি Dcom.sun.management.jmxremote.rmi.port=9011ফায়ারওয়ালে যুক্ত এবং খোলার চেষ্টাও করেছি - ফায়ারওয়ালটি আপ হওয়ার সাথে এখনও সংযোগ করতে পারছি না। কোন চিন্তা? আমি কি কিছু মিস করেছি?
কারমাজেডন

70

ডকার পাত্রে চালনা করার কারণে সংযোগের জন্য অতিরিক্ত অতিরিক্ত সমস্যার একটি সম্পূর্ণ সমস্যা প্রবর্তন করা হয়েছে আশা করি এটি কারও সহায়তা করে। আমি নীচেরটি ব্যাখ্যা করব যা নীচের বিকল্পগুলি যুক্ত করার প্রয়োজন ছিল:

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=${DOCKER_HOST_IP}
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.rmi.port=9998

DOCKER_HOST_IP

স্থানীয়ভাবে jconsole ব্যবহার করা থেকে ভিন্ন, আপনি সম্ভবত ধারকটির মধ্যে থেকে দেখতে পাবেন তার চেয়ে আলাদা আইপি বিজ্ঞাপন করতে হবে। আপনাকে প্রতিস্থাপন করতে হবে${DOCKER_HOST_IP} আপনার ডকার হোস্টের বাহ্যিকভাবে সমাধানযোগ্য আইপি (ডিএনএস নাম) দিয়ে ।

জেএমএক্স রিমোট এবং আরএমআই পোর্টস

দেখে মনে হচ্ছে জেএমএক্সেরও একটি রিমোট ম্যানেজমেন্ট ইন্টারফেসের ( অবিচ্ছিন্ন ) অ্যাক্সেস দরকার যা সংযোগটি সালিশ করার সময় কিছু ডেটা স্থানান্তর করতে একটি ভিন্ন পোর্ট ব্যবহার করেjconsoleএই মানটি সেট করতে আমি তত্ক্ষণাত্ সুস্পষ্ট দেখতে পাইনি । সংযুক্ত নিবন্ধে প্রক্রিয়াটি ছিল:

  • চেষ্টা করুন এবং jconsoleলগিং সক্ষম সঙ্গে থেকে সংযোগ করুন
  • ব্যর্থ
  • কোন বন্দরটি jconsoleব্যবহারের চেষ্টা করেছে তা চিত্রিত করুন
  • সেই বন্দরে সংযোগ করার অনুমতি দেওয়ার জন্য প্রয়োজনীয় iptables/ firewallনিয়মগুলি ব্যবহার করুন

এটি যখন কাজ করে, অবশ্যই এটি কোনও স্বয়ংক্রিয় সমাধান নয়। আমি jconsole থেকে ভিজুয়ালভিএম-তে আপগ্রেড করার জন্য বেছে নিয়েছি কারণ এটি আপনাকে যে পোর্টটিতে চলছে তা স্পষ্টভাবে উল্লেখ করতে দেয় jstatd। ভিজুয়ালভিএম-এ, একটি নতুন রিমোট হোস্ট যুক্ত করুন এবং এটি মানগুলির সাথে আপডেট করুন যা উপরে বর্ণিতগুলির সাথে সম্পর্কিত:

রিমোট হোস্ট যুক্ত করুন

তারপরে নতুন রিমোট হোস্ট সংযোগ এবং ডান ক্লিক করুন Add JMX Connection...

জেএমএক্স সংযোগ যুক্ত করুন

জন্য চেকবক্স চেক করতে ভুলবেন না Do not require SSL connection। আশা করি, এটি আপনাকে সংযোগ করার অনুমতি দেবে।


-Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.rmi.port=[...]পাশাপাশি এসএসএইচের মাধ্যমে জেএমএক্স / আরএমআই টানেলিংয়ের ক্ষেত্রে মূল বিষয়। এগুলি ছাড়া, সার্ভারের সর্বজনীন / প্রধান / ... আইপি ব্যবহার করে দূরবর্তী অবজেক্টগুলি অ্যাক্সেস করা যায় কিছু র্যান্ডম পোর্ট ব্যবহার করে, যা সহজেই ফরোয়ার্ড করা যায় না।
থারস্টেন শেনিং

1
আমি নিশ্চিত করতে পারি যে আপনাকে সত্যই বাহ্যিক থেকে ধারক আইপি ব্যবহার করতে হবে। উদাহরণস্বরূপ এটি সাথে কাজ করে না-Djava.rmi.server.hostname=0.0.0.0
রেসেক্রস্টিন

আমি ব্যবহার করার প্রয়োজন ছিল না DOCKER_HOST_IPআমি শুধু ব্যবহৃত - যে কোন জায়গায় localhostযখন Docker ইমেজ সঞ্চালন ও ফরওয়ার্ড পোর্ট -p 9998:9998, -p 9999:9999প্রভৃতি
বার্নি

9

দ্রষ্টব্য, সাম্প্রতিক অবতারে জাভা 6 জেঙ্কসোলকে জেএমএক্স উদ্বেগ ছাড়াই শুরু করার পরেও নিজেকে একটি চলমান প্রক্রিয়াতে সংযুক্ত করার অনুমতি দেয়।

যদি এটি আপনার কাছে উপলব্ধ থাকে তবে jvisualvm কেও বিবেচনা করুন কারণ এটি প্রোফাইলার সহ চলমান প্রক্রিয়াগুলির জন্য প্রচুর পরিমাণে তথ্য সরবরাহ করে।


3
এটি কেবল তখনই কাজ করে যদি আপনি JVM হিসাবে একই হোস্টটিতে jconsole চালাচ্ছেন যা আপনি নিরীক্ষণের চেষ্টা করছেন।
ধূসর

1
@ থর্জজর্ন যদি আমি কোনও পরামিতি ছাড়াই আমার জাভা প্রোগ্রামটি শুরু করি এবং জকনসোলের সাথে সংযোগ স্থাপনের চেষ্টা করি, তবে আমি তালিকায় আমার প্রোগ্রামটিতে দেখি কিন্তু যখন আমি এটি সংযোগ দেওয়ার চেষ্টা করি ব্যর্থ হয়। আমি মনে করি এটি এসএসএল শংসাপত্রের অভাবের কারণে। আমি কেবল ডেমোটি দেখতে চেয়েছিলাম তাই ব্যবহারকারীর দ্বারা উত্তরে নির্দিষ্ট পরামিতিগুলি ব্যবহার করতে হবে 3013578 এবং এটি আমার পক্ষে কাজ করেছে (জেডিকে 1.7, উইন্ডোজ 8.1, 64 বিট)।
ক্যাপ্টেন জ্যাক স্প্যারো

2
সংযুক্ত API এর জন্য কিছু প্ল্যাটফর্মগুলিতে লঞ্চ করা প্রোগ্রামের মতো 32/64 বিট জেভিএমের মতো জকনসোলের প্রয়োজন।
থরবজর্ন রাভন অ্যান্ডারসন

1
এই আচরণটি অক্ষম করা সম্ভব?
কেভিনার্পে

7

আমি WAS এনডি 7.0 ব্যবহার করছি

আমার জেভিএম জে কনসোলে পর্যবেক্ষণ করার জন্য নিম্নলিখিত সমস্ত যুক্তিগুলি প্রয়োজন need

    -Djavax.management.builder.initial= 
    -Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=8855 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false

হ্যাঁ আপনার উত্তরটি আমার পক্ষে কাজ করেছে (জেডিকে 1.7, উইন্ডোজ 8.1 64 বিট)
ক্যাপ্টেন জ্যাক স্প্যারো

6

লিনাক্সে, আমি নিম্নলিখিত প্যারামগুলি ব্যবহার করেছি:

-Djavax.management.builder.initial= 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9010 
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

এবং আমি এডিট করেছিলাম /etc/hostsযাতে হোস্টের নামটি লুপব্যাক ঠিকানার (127.0.0.1) এর পরিবর্তে হোস্টের ঠিকানায় (192.168.0.x) সমাধান করে 12


2

নিম্নলিখিত কমান্ড লাইন প্যারামিটারগুলি সহ আপনার জাভা অ্যাপ্লিকেশনটি চালান:

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

-Dcom.sun.management.jmxremote.ssl = মিথ্যা ব্যবহার করা গুরুত্বপূর্ণআপনি যদি জেএমএক্স হোস্টে ডিজিটাল শংসাপত্র সেটআপ করতে না চান তবে প্যারামিটার ।

আপনি যদি একটি মেশিন IP ঠিকানা থাকার উপর আপনার আবেদন শুরু তাহলে 192.168.0.1 , খোলা jconsole , করা 192.168.0.1:8855 মধ্যে রিমোট প্রক্রিয়া ক্ষেত্র, এবং ক্লিক করুন কানেক্ট


ভুলে গেলে প্রত্যাশিত আচরণ কী -Dcom.sun.management.jmxremote.ssl=false? jconsoleএকটি ত্রুটি দেখানো উচিত , বা এটি চুপচাপ সংযোগ দিতে ব্যর্থ হবে?
অ্যামাক্লাড

2

নীচে কমান্ড লাইন পরামিতি সহ,

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

কখনও কখনও লিনাক্স সার্ভারে, ইমেক্স সংযোগ সফল হয় না। এটি কারণ, ক্লাউড লিনাক্স হোস্টে, / ইত্যাদি / হোস্টগুলিতে যাতে হোস্টের নাম হোস্টের ঠিকানায় সমাধান হয়।

এটি ঠিক করার সর্বোত্তম উপায় হ'ল নেটওয়ার্কের অন্যান্য মেশিন থেকে নির্দিষ্ট লিনাক্স সার্ভারটি পিং করুন এবং হোস্ট আইপি ঠিকানাটি ব্যবহার করুন

-Djava.rmi.server.hostname=IP address that obtained when you ping that linux server.

তবে ifconfig.me ব্যবহার করে আপনি লিনাক্স সার্ভার থেকে প্রাপ্ত আইপ্যাড্রেসের উপর কখনও নির্ভর করবেন না। আপনি যে আইপিটি পাবেন সেখানে একটি মুখোশযুক্ত রয়েছে যা হোস্ট ফাইলটিতে উপস্থিত রয়েছে।


1

প্রথমে আপনার জাভা প্রক্রিয়াটি ইতিমধ্যে জেএমএক্স পরামিতিগুলির সাথে চলছে কিনা তা পরীক্ষা করে দেখার দরকার। এটা কর:

ps -ef | grep java

আপনার জাভা প্রক্রিয়া যা আপনার নিরীক্ষণের প্রয়োজন তা পরীক্ষা করুন। আপনি যদি jmx rmi পরামিতি দেখতে পারেন Djmx.rmi.registry.port = xxxx তবে জেএমএক্স সংযোগের অধীনে এটি দূরবর্তীভাবে সংযোগ করতে আপনার জাভা ভিজ্যুভলে বর্ণিত পোর্টটি ব্যবহার করুন।

যদি এটি জেএমএক্স আরএমআই পোর্টের মধ্য দিয়ে চলতে না থাকে তবে আপনার নীচে উল্লিখিত প্যারামিটারগুলি সহ আপনার জাভা প্রক্রিয়াটি চালানো দরকার:

-Djmx.rmi.registry.port=1234 -Djmx.rmi.port=1235 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

দ্রষ্টব্য: পোর্ট নম্বরগুলি আপনার পছন্দের উপর ভিত্তি করে।

এখন আপনি এই বন্দরটি জেএমএক্স সংযোগের জন্য ব্যবহার করতে পারেন। এখানে এটি বন্দর 1234


আপনি একবার এটি চালানোর পরে jmx দ্বারা ব্যবহৃত 1234 বন্দরটি দেখতে সক্ষম হবেন? sudo lsof -i:1234আমার জন্য কিছুই দেখাচ্ছে না
গর্জন_উইনিয়ন

1

পদক্ষেপ 1: নিম্নলিখিত পরামিতিগুলি ব্যবহার করে অ্যাপ্লিকেশনটি চালান।

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

উপরের যুক্তিগুলি অ্যাপ্লিকেশনটিকে 9999 বন্দরে আবদ্ধ করে।

ধাপ ২: কমান্ড প্রম্পট বা টার্মিনালে jconsole কমান্ড চালিয়ে jconsole চালু করুন।

'রিমোট প্রসেস:' নির্বাচন করুন এবং l আইপি_এড্রেস}: 9999 হিসাবে ইউআরএল প্রবেশ করুন এবং দূরবর্তী অ্যাপ্লিকেশনটিতে সংযোগের জন্য কানেক্ট বোতামে ক্লিক করুন।

সম্পূর্ণ আবেদনের জন্য আপনি এই লিঙ্কটি উল্লেখ করতে পারেন ।


0

আমার এই সঠিক সমস্যাটি ছিল, এবং সঠিক সেটিংসটি পরীক্ষা এবং সনাক্ত করার জন্য একটি গিটহাব প্রকল্প তৈরি করেছি

এটিতে Dockerfileসহায়ক স্ক্রিপ্টগুলির সাথে একটি কাজ এবং docker-compose.ymlদ্রুত পরীক্ষার জন্য একটি সাধারণ কাজ রয়েছে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.