Jconsole দিয়ে অ্যাক্সেসের জন্য কীভাবে JVX এ JMX সক্রিয় করবেন?
Jconsole দিয়ে অ্যাক্সেসের জন্য কীভাবে JVX এ JMX সক্রিয় করবেন?
উত্তর:
সম্পর্কিত ডকুমেন্টেশন এখানে পাওয়া যাবে:
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
Dcom.sun.management.jmxremote.rmi.port=9011
ফায়ারওয়ালে যুক্ত এবং খোলার চেষ্টাও করেছি - ফায়ারওয়ালটি আপ হওয়ার সাথে এখনও সংযোগ করতে পারছি না। কোন চিন্তা? আমি কি কিছু মিস করেছি?
ডকার পাত্রে চালনা করার কারণে সংযোগের জন্য অতিরিক্ত অতিরিক্ত সমস্যার একটি সম্পূর্ণ সমস্যা প্রবর্তন করা হয়েছে আশা করি এটি কারও সহায়তা করে। আমি নীচেরটি ব্যাখ্যা করব যা নীচের বিকল্পগুলি যুক্ত করার প্রয়োজন ছিল:
-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=[...]
পাশাপাশি এসএসএইচের মাধ্যমে জেএমএক্স / আরএমআই টানেলিংয়ের ক্ষেত্রে মূল বিষয়। এগুলি ছাড়া, সার্ভারের সর্বজনীন / প্রধান / ... আইপি ব্যবহার করে দূরবর্তী অবজেক্টগুলি অ্যাক্সেস করা যায় কিছু র্যান্ডম পোর্ট ব্যবহার করে, যা সহজেই ফরোয়ার্ড করা যায় না।
-Djava.rmi.server.hostname=0.0.0.0
DOCKER_HOST_IP
আমি শুধু ব্যবহৃত - যে কোন জায়গায় localhost
যখন Docker ইমেজ সঞ্চালন ও ফরওয়ার্ড পোর্ট -p 9998:9998, -p 9999:9999
প্রভৃতি
দ্রষ্টব্য, সাম্প্রতিক অবতারে জাভা 6 জেঙ্কসোলকে জেএমএক্স উদ্বেগ ছাড়াই শুরু করার পরেও নিজেকে একটি চলমান প্রক্রিয়াতে সংযুক্ত করার অনুমতি দেয়।
যদি এটি আপনার কাছে উপলব্ধ থাকে তবে jvisualvm কেও বিবেচনা করুন কারণ এটি প্রোফাইলার সহ চলমান প্রক্রিয়াগুলির জন্য প্রচুর পরিমাণে তথ্য সরবরাহ করে।
আমি 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
লিনাক্সে, আমি নিম্নলিখিত প্যারামগুলি ব্যবহার করেছি:
-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
নিম্নলিখিত কমান্ড লাইন প্যারামিটারগুলি সহ আপনার জাভা অ্যাপ্লিকেশনটি চালান:
-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
একটি ত্রুটি দেখানো উচিত , বা এটি চুপচাপ সংযোগ দিতে ব্যর্থ হবে?
নীচে কমান্ড লাইন পরামিতি সহ,
-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 ব্যবহার করে আপনি লিনাক্স সার্ভার থেকে প্রাপ্ত আইপ্যাড্রেসের উপর কখনও নির্ভর করবেন না। আপনি যে আইপিটি পাবেন সেখানে একটি মুখোশযুক্ত রয়েছে যা হোস্ট ফাইলটিতে উপস্থিত রয়েছে।
প্রথমে আপনার জাভা প্রক্রিয়াটি ইতিমধ্যে জেএমএক্স পরামিতিগুলির সাথে চলছে কিনা তা পরীক্ষা করে দেখার দরকার। এটা কর:
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
।
sudo lsof -i:1234
আমার জন্য কিছুই দেখাচ্ছে না
পদক্ষেপ 1: নিম্নলিখিত পরামিতিগুলি ব্যবহার করে অ্যাপ্লিকেশনটি চালান।
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
উপরের যুক্তিগুলি অ্যাপ্লিকেশনটিকে 9999 বন্দরে আবদ্ধ করে।
ধাপ ২: কমান্ড প্রম্পট বা টার্মিনালে jconsole কমান্ড চালিয়ে jconsole চালু করুন।
'রিমোট প্রসেস:' নির্বাচন করুন এবং l আইপি_এড্রেস}: 9999 হিসাবে ইউআরএল প্রবেশ করুন এবং দূরবর্তী অ্যাপ্লিকেশনটিতে সংযোগের জন্য কানেক্ট বোতামে ক্লিক করুন।
সম্পূর্ণ আবেদনের জন্য আপনি এই লিঙ্কটি উল্লেখ করতে পারেন ।
আমার এই সঠিক সমস্যাটি ছিল, এবং সঠিক সেটিংসটি পরীক্ষা এবং সনাক্ত করার জন্য একটি গিটহাব প্রকল্প তৈরি করেছি ।
এটিতে Dockerfile
সহায়ক স্ক্রিপ্টগুলির সাথে একটি কাজ এবং docker-compose.yml
দ্রুত পরীক্ষার জন্য একটি সাধারণ কাজ রয়েছে ।