डिफ़ॉल्ट JMX करके, स्थानीय रूप से स्वचालित रूप से पहुँचा जा सकता है तो jconsole
स्थानीय स्तर पर चल रहा है बंदरगाह संपर्क के बिना सब अपने स्थानीय जावा क्षुधा का पता लगाने जाएगा।
जेएमएक्स दूरस्थ रूप से के माध्यम से एक ऐप तक पहुंचने के लिए आपको एक आरएमआई रजिस्ट्री पोर्ट निर्दिष्ट करना होगा। यह जानने की बात यह है कि कनेक्ट होने पर, जेएमएक्स उस बंदरगाह पर शुरू होता है और तोपर डेटा कनेक्शन को यादृच्छिक उच्च पोर्ट पर स्थापित करता है, जो आपके बीच में फ़ायरवॉल है, तो यह एक बड़ी समस्या है। ("अरे sysadmins, बस सब कुछ खोलो, mkay?")।
विकल्प 1:: कमांड लाइन
-Dcom.sun.management.jmxremote.port=$JMX_REGISTRY_PORT
-Dcom.sun.management.jmxremote.rmi.port=$RMI_SERVER_PORT
आप स्प्रिंग उपयोग कर रहे हैं
ही बंदरगाह पर वापस कनेक्ट करने के लिए बाध्य करने के लिए JMX के रूप में आप की स्थापना की है, तो आप एक जोड़े विकल्प हैं बूट करें आप इसे अपने (appname).conf
फ़ाइल में डाल सकते हैं जो आपके (appname).jar
परिनियोजन के साथ रहता है।
विकल्प 2: बिलाव/Tomee विन्यास
कॉन्फ़िगर एक JmxRemoteLifecycleListener:
Maven जार:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-jmx-remote</artifactId>
<version>8.5.9</version>
<type>jar</type>
</dependency>
अपने सर्वर को कॉन्फ़िगर करें।xml:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
विकल्प 3: RMI होस्ट/पोर्ट और JNDI: कॉन्फ़िगर प्रोग्राम के रूप में
@Configuration
public class ConfigureRMI {
@Value("${jmx.rmi.host:localhost}")
private String rmiHost;
@Value("${jmx.rmi.port:1099}")
private Integer rmiPort;
@Bean
public RmiRegistryFactoryBean rmiRegistry() {
final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
rmiRegistryFactoryBean.setPort(rmiPort);
rmiRegistryFactoryBean.setAlwaysCreate(true);
return rmiRegistryFactoryBean;
}
@Bean
@DependsOn("rmiRegistry")
public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
connectorServerFactoryBean.setObjectName("connector:name=rmi");
connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
return connectorServerFactoryBean;
}
}
चाल, तो आप देखेंगे, serviceUrl
जिसमें आप JMX निर्दिष्ट दोनों है: आरएमआई मेजबान/बंदरगाह। यदि आप दोनों निर्दिष्ट करते हैं, तो आपको यादृच्छिक उच्च "समस्या" नहीं मिलेगी।
क्या यह दृष्टिकोण नीचे 'JAVA_OPTS' विधि का उपयोग करके बहिष्कृत करता है? – raffian