Java Language
JMX
खोज…
परिचय
JMX तकनीक उपकरणों के वितरण, वेब-आधारित, मॉड्यूलर और गतिशील समाधानों के प्रबंधन और निगरानी उपकरणों, अनुप्रयोगों और सेवा-संचालित नेटवर्क के लिए उपकरण प्रदान करती है। डिजाइन के अनुसार, यह मानक विरासत प्रणालियों को अपनाने, नए प्रबंधन को लागू करने और समाधानों की निगरानी करने और भविष्य के उन लोगों के लिए उपयुक्त है।
प्लेटफ़ॉर्म एमबीयन सर्वर के साथ सरल उदाहरण
मान लीजिए कि हमारे पास कुछ सर्वर हैं जो नए उपयोगकर्ताओं को पंजीकृत करता है और उन्हें कुछ संदेश के साथ बधाई देता है। और हम इस सर्वर की निगरानी करना चाहते हैं और इसके कुछ मापदंडों को बदलना चाहते हैं।
सबसे पहले, हमें अपनी निगरानी और नियंत्रण विधियों के साथ एक इंटरफ़ेस की आवश्यकता है
public interface UserCounterMBean {
long getSleepTime();
void setSleepTime(long sleepTime);
int getUserCount();
void setUserCount(int userCount);
String getGreetingString();
void setGreetingString(String greetingString);
void stop();
}
और कुछ सरल कार्यान्वयन जो हमें यह देखने देंगे कि यह कैसे काम कर रहा है और हम इसे कैसे प्रभावित करते हैं
public class UserCounter implements UserCounterMBean, Runnable {
private AtomicLong sleepTime = new AtomicLong(10000);
private AtomicInteger userCount = new AtomicInteger(0);
private AtomicReference<String> greetingString = new AtomicReference<>("welcome");
private AtomicBoolean interrupted = new AtomicBoolean(false);
@Override
public long getSleepTime() {
return sleepTime.get();
}
@Override
public void setSleepTime(long sleepTime) {
this.sleepTime.set(sleepTime);
}
@Override
public int getUserCount() {
return userCount.get();
}
@Override
public void setUserCount(int userCount) {
this.userCount.set(userCount);
}
@Override
public String getGreetingString() {
return greetingString.get();
}
@Override
public void setGreetingString(String greetingString) {
this.greetingString.set(greetingString);
}
@Override
public void stop() {
this.interrupted.set(true);
}
@Override
public void run() {
while (!interrupted.get()) {
try {
System.out.printf("User %d, %s%n", userCount.incrementAndGet(), greetingString.get());
Thread.sleep(sleepTime.get());
} catch (InterruptedException ignored) {
}
}
}
}
स्थानीय या दूरस्थ प्रबंधन के साथ सरल उदाहरण के लिए, हमें अपना एमबीएन रजिस्टर करना होगा:
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
public class Main {
public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
final UserCounter userCounter = new UserCounter();
final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
final ObjectName objectName = new ObjectName("ServerManager:type=UserCounter");
mBeanServer.registerMBean(userCounter, objectName);
final Thread thread = new Thread(userCounter);
thread.start();
thread.join();
}
}
उसके बाद हम अपने एप्लिकेशन को चला सकते हैं और इसे jConsole के माध्यम से कनेक्ट कर सकते हैं, जो आपके $JAVA_HOME/bin
डायरेक्टरी में पाया जा सकता है। सबसे पहले, हमें अपने आवेदन के साथ हमारी स्थानीय जावा प्रक्रिया खोजने की आवश्यकता है
फिर MBeans टैब पर जाएं और उस MBean को जो हमने अपने मुख्य वर्ग में एक ObjectName
(उदाहरण के लिए ऊपर ServerManager
) में उपयोग किया है। Attributes
अनुभाग में हम विशेषताएँ देख सकते हैं। यदि आपने निर्दिष्ट विधि ही प्राप्त की है, तो विशेषता पठनीय होगी, लेकिन लिखने योग्य नहीं। यदि आपने निर्दिष्ट और प्राप्त करने के तरीकों दोनों को निर्दिष्ट किया है, तो विशेषता पठनीय और लेखन योग्य होगी।
निर्दिष्ट तरीकों को Operations
अनुभाग में लागू किया जा सकता है।
यदि आप दूरस्थ प्रबंधन का उपयोग करने में सक्षम होना चाहते हैं, तो आपको अतिरिक्त जेवीएम मापदंडों की आवश्यकता होगी, जैसे:
-Dcom.sun.management.jmxremote=true //true by default
-Dcom.sun.management.jmxremote.port=36006
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
ये पैरामीटर JMX गाइड के अध्याय 2 में पाए जा सकते हैं। उसके बाद आप अपने एप्लिकेशन को jconsole jconsole host:port
साथ दूरस्थ रूप से jCsole कंसोल के माध्यम से कनेक्ट करने में सक्षम होंगे jconsole host:port
या निर्दिष्ट host:port
साथ host:port
या service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi
jConsole GUI में।
उपयोगी कड़ियाँ: