खोज…


परिचय

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 में।

उपयोगी कड़ियाँ:



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow