원격 JMX JConsole을 사용하는 사람이 있습니까?


120

나는 과거에 이것을 작동하지 않은 것 같습니다. 현재는 작동하지 않는다는 것을 알고 있습니다.

그러나 우리는 Java 프로세스를 시작합니다.

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

포트에 텔넷을 연결할 수 있고 "무언가 있습니다"(즉, 프로세스를 시작하지 않으면 응답이 없지만 수행하면 응답이 있음). JConsole이 IP를 채우는 작업을 수행하지 못합니다. 및 포트.

너무 단순해야하지만 오류, 소음, 아무것도 없어야합니다. 작동하지 않습니다.

누구든지 이것에 대한 뜨거운 팁을 알고 있습니까?


3
바람둥이를 사용하는 경우 이것이 해결책 일 수 있습니다. stackoverflow.com/questions/1263991/…
Hajo Thelen

5
@Will에서 뭔가를 받아들이는 것을 잊었습니까?
Gray

답변:


126

이에 대한 해결책이 있습니다.

귀하의 경우 자바 프로세스는 방화벽 뒤에 리눅스에서 실행 하면 시작하려는 JConsole의 / 자바 VisualVM과 / 자바 미션 컨트롤 에 연결하려면 로컬 컴퓨터에 Windows의를 자바 프로세스의 JMX 포트 .

SSH 로그인을 통해 Linux 시스템에 액세스해야합니다. 모든 통신은 SSH 연결을 통해 터널링됩니다.

팁 : 이 솔루션은 방화벽이 있는지 여부에 관계없이 작동합니다.

단점 : Java 프로세스 를 다시 시작할 때 마다 4-9 단계의 모든 단계를 다시 수행해야합니다.


1. 여기에서 Windows 시스템 용 퍼티 스위트가 필요합니다.

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

적어도 putty.exe


2. Linux 시스템에서 하나의 사용 가능한 포트를 정의하십시오.

<jmx-remote-port>

예:

jmx-remote-port = 15666      


3. 리눅스 머신의 자바 프로세스에 인수 추가

이것은 정확히 이와 같이 수행되어야합니다. 아래와 같이 수행되면 방화벽 뒤의 Linux 머신에서 작동합니다 ( -Djava.rmi.server.hostname=localhost논쟁의 원인으로 작동합니다 ).

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

예:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main


4. Java 프로세스의 Process-Id 가져 오기

ps -ef | grep <java-processname>

result ---> <process-id>

예:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5. RMIServer 스텁 다운로드를위한 임의의 포트 찾기

Java 프로세스는 Linux 시스템에서 새 TCP 포트를 엽니 다. 여기서 RMI 서버 스텁을 다운로드 할 수 있습니다. 이 포트는 또한 Java Virtual Machine에 연결하기 위해 SSH 터널을 통해 사용할 수 있어야합니다.

으로 netstat -lp이 포트는 찾을 수는 lsof -iJava 프로세스 형태로 개설되었습니다 어떤 포트 힌트를 제공합니다.

참고 :이 포트는 Java 프로세스가 시작될 때 항상 변경됩니다.

netstat -lp | grep <process-id>

tcp        0      0 *:<jmx-remote-port>     *:*     LISTEN      24321/java
tcp        0      0 *:<rmi-server-port>     *:*     LISTEN      24321/java


result ---> <rmi-server-port>

예:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6. putty를 사용하여 Windows 시스템에서 두 개의 SSH 터널을 활성화합니다.

Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local       
[x] Auto       

Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local       
[x] Auto

예:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


Putty를 통해 SSL 터널을 열기위한 설정


7.이 SSH-Tunnel이 활성화 된 Putty로 Linux 시스템에 로그인합니다.

퍼티 세션을 열어 둡니다.

로그인하면 Putty는 SSH 포트 22를 통해 모든 TCP 연결을 Linux 시스템에 터널링합니다.

JMX 포트 :

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer-Stub-Port :

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8. 다음 URL을 사용하여 JConsole / Java VisualVM / Java Mission Control을 시작하여 Java 프로세스에 연결합니다.

이것은 JConsole / Java VisualVM / Java Mission Control이 로컬 Windows 시스템의 포트에 연결한다고 생각하기 때문에 작동합니다. 그러나 Putty는 모든 페이로드를 Linux 시스템의 포트 15666으로 보냅니다.

리눅스 머신에서는 먼저 자바 프로세스가 응답을 제공하고 RMIServer 포트를 다시 보냅니다. 이 예에서는 37123입니다.

그런 다음 JConsole / Java VisualVM / Java Mission Control은 localhost : 37123에 연결되어 있다고 생각하고 putty는 전체 페이로드를 Linux 시스템으로 전송합니다.

자바 프로세스가 응답하고 연결이 열립니다.

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

예:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


jmx 서비스 URL을 통해 연결


9. 즐기기 # 8-]


1
여기에 약간의 질문이 있습니다-rmi 없이는 JMX 연결을 할 수 없습니까?
Kumar Vaibhav 2015

5
rmi.port를 고정 포트 번호로 설정할 수 있다는 힌트를 얻었으므로 RMIServer 스텁 다운로드를 위해 임의의 포트를 설정할 수 있습니다. 이것은 Java 등록 정보 "com.sun.management.jmxremote.rmi.port = <rmi-server-port>"와 함께 작동해야합니다. Oracle Java VM에서 문서화되지 않은 기능처럼 보입니다.
sushicutta 15.02.17

1
확실히 키 저장소와
신뢰할 수있는

동일 과정,하지만 난 테이블에 같은 목적을 가지고
wener

2
@sushicutta 당신은 당신의 대답 에이 힌트를 추가 할 수 있으며 완벽하게 작동하며 4에서 6까지의 단계를 제거 할 수 있습니다. 포워드 포트는 원래 포트와 동일해야하며 jmx 및 rmi 포트도 동일
초라한

80

추가하면 -Djava.rmi.server.hostname='<host ip>'이 문제가 해결되었습니다.


2
제 경우에는 ip 주소 (-Djava.rmi.server.hostname = <ip>)를 추가해야합니다. hostname -i는 나에게 두 개의 IP 주소를 주었고 올바른 것은 목록에서 두 번째였습니다.
Georgy Bolyuba 2009

4
나를 위해 문제를 해결하지 못했습니다. Windows-2-windows를 연결하는 것은 나에게 문제가 아니지만 Oracle JDK 1.6.024로 SUSE에서 실행되는 Java 서비스를 모니터링하기 위해 Windows의 JVM Jvisualvm.exe에서 연결하려고하면 연결에 실패합니다. 이런 이유로 저는이 사람의 질문에 여전히 답이 없다고 생각합니다.
djangofan

이것은 나를 위해 문제를 해결했습니다. 여기에 일반적인 3 (authenticate / port / ssl) 세트가 추가되어 이제 원격으로 연결할 수 있습니다. 상자는 여러 가상 인터페이스에서 수신 대기하고 있지만 호스트를 지정하지 않은 이유는 jvm을 혼란스럽게 만들었습니다.
Nicholi

마침내 내 osx 노트북에서 jconsole을 연결하는 문제를 해결했습니다. 감사.
왜 그래

나를 위해 일했습니다. 감사합니다!
Jeff

58

Java 8 이상 버전으로 시도

이 솔루션은 방화벽에서도 잘 작동합니다.

1. 원격 호스트의 자바 시작 스크립트에 다음을 추가합니다.

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

2. 이것을 컴퓨터에서 실행하십시오.

  • Windows 사용자 :

    putty.exe -ssh user@remote-host -L 1616:remote-host:1616

  • Linux 및 Mac 사용자 :

    ssh user@remote-host -L 1616:remote-host:1616

3. jconsole컴퓨터에서 시작

jconsole localhost:1616

4. 재미있게 보내세요!

추신 : 2 단계 동안 사용 ssh하고 -L로컬 (클라이언트) 호스트의 포트 1616을 원격 측으로 전달해야 함을 지정합니다. 이것은 ssh 터널이며 방화벽이나 다양한 네트워크 문제를 방지하는 데 도움이됩니다.


1
대박!! java8의 ActiveMQ 인스턴스에 jmx-remote하기 위해 6 시간 이상을 시도했습니다. 마침내 작동 한 것 !! 감사! :)
Rop

고마워요, 당신처럼 나도 하루 정도 힘들었고, 너무 많은 일을 마치고 난 그냥 생각했습니다 : "이걸 이렇게 써야 해 !!"
freedev 2016

2
정말 오라클은 "com.sun.management.jmxremote.rmi.port", "java.rmi.server.hostname"언급하지 않는 짜증 docs.oracle.com/javase/8/docs/technotes/guides/management/... I을 그게 내 문제라고 생각합니다.
Rop

AFAIK,이 문제는 JMX에 관한 것이 아니라 RMI가 작동하는 방식이기 때문입니다. 예를 들어,이 경우 클라이언트 / 서버 구현에서 rmi를 사용하는 jmeter에서 동일한 문제가 발생했습니다.
freedev 2016

2
효과가있다. 터널에 대한 내 경험을 추가하기 만하면 1) "-L 1616 : localhost : 1616"에서 "localhost"를 사용할 수 있습니다. 2) 소스 포트를 변경할 수 없습니다. 즉, 작동하지 않습니다. "-L 9999 : localhost : 1616"
gargii

19

방화벽에 문제가있을 수 있습니다. '문제'는 지정한 포트가 사용되는 유일한 포트가 아니라 RMI에 대해 1 개 또는 2 개 이상의 포트를 사용하며 방화벽에 의해 차단 될 수 있다는 것입니다.

기본 RMI 구성을 사용하는 경우 추가 포트 중 하나를 미리 알 수 없으므로 큰 범위의 포트를 열어야합니다. 이는 서버 관리자를 즐겁게하지 않을 수 있습니다.

많은 포트를 열 필요가없는 솔루션이 있지만 소스 스 니펫과 팁을 결합하여 작동하도록했습니다.

http://forums.sun.com/thread.jspa?threadID=5267091- 링크가 더 이상 작동하지 않습니다.

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

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

ssh 터널을 설정하고 작동시킬 수도 있습니다. :-)


2
여기에 다른 답변에서 언급 한대로 -Djava.rmi.server.hostname 설정과 함께 simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html에 설명 된 별칭 만 사용하여 방화벽을 해결할 수있었습니다.
Damien

향후 독자 참고 사항 : 링크 forums.sun.com가 끊어졌습니다
CDspace

1
향후 독자 참고 사항 : 링크 blogs.oracle.com가 끊어졌습니다.
Grimlock

17

지난 며칠 동안 내 Google-fu를 테스트 한 후 마침내 Stack Overflow와이 페이지 http://help.boomi.com/atomsphere/GUID-F787998C- 에서 답변을 컴파일 한 후이 작업을 수행 할 수있었습니다 . 53C8-4662-AA06-8B1D32F9D55B.html .

Dell Boomi 페이지에서 재 게시 :

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the <atom_installation_directory>\bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Stack Overflow 답변 표지를 보지 못한 한 줄은

-Dcom.sun.management.jmxremote.rmi.port=5002

제 경우에는 Kakfa 메트릭을 검색하려고했기 때문에 위의 옵션을 -Dcom.sun.management.jmxremote.port값 과 일치하도록 변경했습니다 . 따라서 어떤 종류의 인증도없이 최소한의 구성은 다음과 같아야합니다.

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)

1
Plus one for "Google-fu"
kevinarpe

"com.sun.management.jmxremote.rmi.port"도 저에게 핵심이었습니다. 이 답변도 참조하십시오 : stackoverflow.com/a/22306586/123205
David

"com.sun.management.jmxremote.local.only"가 필요하지 않았으므로 구성이 진정으로 "최소한"이라고 생각하지 않습니다
David


7

Sushicutta의 4-7 단계는 3 단계에 다음 줄을 추가하여 건너 뛸 수 있습니다.

-Dcom.sun.management.jmxremote.rmi.port=<same port as jmx-remote-port>

예 : 시작 매개 변수에 추가 :

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

포트 포워딩의 경우 다음을 사용하여 연결합니다.

ssh -L 12345:localhost:12345 <username>@<host>

호스트가 디딤돌 인 경우 위의 단계 이후에 디딤돌에서 다음을 실행하여 포트를 앞으로 연결하면됩니다.

ssh -L 12345:localhost:12345 <username>@<host2>

jmxremote가 rmi 연결이 터널을 사용하도록 지시하는지 확인 하려면 hostname = localhost 가 필요합니다. 그렇지 않으면 직접 연결을 시도하고 방화벽에 도달 할 수 있습니다.


이 방법은 도움이됩니다. (1) 누락 된 JMX 매개 변수를 추가하고 앱을 다시 시작합니다. (2) 그런 다음 ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host> 로컬 컴퓨터에서 실행 합니다. (3) 그런 다음 다음을 사용하여 원격 JMX에 연결합니다. jconsole <remote_host>:<JMX_port>
Rib47

6

PROTIP :

RMI 포트는 임의의 portnr에서 열립니다. 방화벽이 있고 1024-65535 포트를 열지 않으려면 (또는 vpn 사용) 다음을 수행해야합니다.

RMI 레지스트리 및 JMX / RMI 서버 포트를 수정해야합니다 (알려진 번호가 있음). lib-dir에 jar 파일 (catalina-jmx-remote.jar)을 넣고 서버 아래에 특수 리스너를 구성하면됩니다.

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(물론 JMX 활성화를위한 일반적인 플래그

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

참조 : http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html의 JMX 원격 라이프 사이클 리스너

그런 다음이 끔찍한 URL을 사용하여 연결할 수 있습니다.

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

Extras jar를 사용하여 위의 작업을 시도했으며 지정된대로 수신 대기하는 RMI 포트를 볼 수 있지만 VisualVM을 사용하여 JVM 포트에 연결 한 후 RMI에서 여전히 임의의 포트를 사용합니다. 해결 방법 : 'lsof -i'가있는 포트를 확인하고 연결이 차단 된 포트를 엽니 다.
Joseph Lust 2013

5

서버가 방화벽 뒤에 있는지 확인하십시오. JMX는 시작할 때 두 개의 포트를 여는 RMI를 기반으로합니다. 하나는 레지스터 포트이고 기본값은 1099이며 com.sun.management.jmxremote.port옵션 으로 지정할 수 있습니다 . 다른 하나는 데이터 통신을위한 것이며 랜덤 한 것이 문제의 원인입니다. 좋은 소식은 JDK6에서이 임의의 포트를 com.sun.management.jmxremote.rmi.port옵션 으로 지정할 수 있다는 것입니다.

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

4

방화벽을 통해 JMX를 얻는 것은 정말 어렵습니다. 문제는 표준 RMI가 RMI 레지스트리 옆에 두 번째 임의 할당 포트를 사용한다는 것입니다.

작동하는 세 가지 솔루션이 있지만 모든 경우에는 다른 솔루션이 필요합니다.

  1. Socks 프록시가있는 SSH 터널을 통한 JMX, SSH 매직이있는 표준 RMI 사용 http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. JMX MP (표준 RMI의 대안)는 고정 포트를 하나만 사용하지만 서버 및 클라이언트 http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/ 에 특수 jar가 필요합니다 .

  3. JMX 서버 양식 코드를 시작하면 표준 RMI를 사용하고 고정 된 두 번째 포트를 사용할 수 있습니다. https://issues.apache.org/bugzilla/show_bug.cgi?id=39055


모든 다른 답변이 하나에 추가해야한다
ruruskyi

2

원격 JMX 문제를 테스트 / 디버깅 / 진단 할 때 먼저 항상 MBeanServer를 포함하는 동일한 호스트 (예 : localhost)에 연결하여 네트워크 및 기타 비 JMX 관련 문제를 배제하십시오.


2

여기에는 이미 몇 가지 훌륭한 답변이 있지만 공유 할 가치가 있다고 생각하는 약간 더 간단한 접근 방식이 있습니다.

sushicutta의 접근 방식은 좋지만 매번 RMI 포트를 가져와야하므로 매우 수동입니다. 고맙게도 포트 터널을 명시 적으로 여는 대신 SOCKS 프록시를 사용하여 문제를 해결할 수 있습니다. 이 접근 방식의 단점은 컴퓨터에서 실행하는 JMX 앱이 프록시를 사용하도록 구성 할 수 있어야한다는 것입니다. 대부분의 프로세스는 Java 속성을 추가하여이 작업을 수행 할 수 있지만 일부 앱은이를 지원하지 않습니다.

단계 :

  1. 원격 Java 서비스의 시작 스크립트에 JMX 옵션을 추가합니다.

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. 원격 컴퓨터에 대한 SOCKS 프록시 연결을 설정합니다.

    ssh -D 9696 user@remotemachine.com
    
  3. SOCKS 프록시 (localhost : 9696)를 사용하도록 로컬 Java 모니터링 앱을 구성합니다. 참고 : 수 때로는 명령 행, 즉에서이 작업을 수행 :

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    

2

다음은 나를 위해 일했습니다 (포트 2101이 실제로 이것에 기여하지 않았다고 생각합니다).

-Dcom.sun.management.jmxremote.port=2100
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=2101
-Djava.rmi.server.hostname=<IP_ADDRESS>OR<HOSTNAME>

원격 컴퓨터에서 Docker가 실행중인 서버로 연결 중이며 프로세스가 컨테이너 내부에 있습니다. 또한 firewallD를 중지했지만 방화벽이 열려 있어도 2100에 텔넷을 연결할 수있어 문제가되지 않았다고 생각합니다. 도움이 되었기를 바랍니다.


1

Linux Redhat ES3를 실행하는 tomcat에 연결되는 Windows에서 JConsole / JVisualVm을 실행하고 있습니다.

다음 명령을 사용하여 패킷 필터링을 비활성화하면 나에게 트릭이 생겼습니다.

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

여기서 jconsole-host는 JConsole이 실행되는 호스트 이름 또는 호스트 주소이고 jmxremote-port는 원격 관리를 위해 com.sun.management.jmxremote.port에 대해 설정된 포트 번호입니다.


2
SUSE Amazon EC2 인스턴스에서 작동하지 않았습니다. 문제는 다른 곳에 있다고 생각합니다.
djangofan 2011 년

1

boot2docker를 사용하여 Tomcat이 포함 된 도커 컨테이너를 실행하고 있는데 동일한 문제가 발생했습니다. 해결책은 다음과 같습니다.

  • 더하다 -Djava.rmi.server.hostname=192.168.59.103
  • 호스트 및 도커 컨테이너에서 동일한 JMX 포트를 사용하십시오 (예 : docker run ... -p 9999:9999 .... 다른 포트를 사용하면 작동하지 않습니다.

0

또한 시스템 이름이 JMX가 바인딩하는 IP로 확인되는지 확인해야합니다. localhost도 127.0.0.1도 아닙니다. 저에게는 이것을 명시 적으로 정의하는 호스트에 항목을 넣는 데 도움이되었습니다.


0

방화벽을 통해 JMX를 얻는 것은 전혀 어렵지 않습니다. 작은 캐치가 하나 있습니다. 두 JMX 구성 포트를 모두 전달해야합니다. 9010 및 내 컴퓨터에서 수신하는 동적 포트 중 하나는 30000 이상이었습니다.


0

다음은 나를 위해 일한 단계입니다 (서버 측 방화벽 뒤에 데비안, 로컬 Mac에서 VPN을 통해 도달).

서버 IP 확인

hostname -i

JVM 매개 변수 사용 :

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[jmx port]
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=[server ip from step 1]

응용 프로그램 실행

실행중인 자바 프로세스의 PID 찾기

JMX / RMI에서 사용하는 모든 포트 확인

netstat -lp | grep [pid from step 4]

방화벽에서 5 단계의 모든 포트를 엽니 다.

짜잔.


0

기여하기 위해 Tomcat 6 용 CentOS 6.4에서이 작업을 수행했습니다.

  1. iptables 서비스 종료

    service iptables stop
    
  2. tomcat6.conf에 다음 행을 추가하십시오.

    CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8085 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[host_ip]"
    

이렇게하면 JConsole을 사용하여 다른 PC에서 연결할 수있었습니다.


0

JMC를 실행할 그래픽 환경을 제공하지 않는 원격 서버에서 NiFi를 프로파일 링하기 위해 JFR (Flight Recorder)을 실행하기 위해 JMC를 시도하고 있습니다.

여기에 제공된 다른 답변과 많은 시행 착오에 따라 NiFi를 시작할 때 JVM ( conf / bootstrap.conf )에 제공하는 내용이 있습니다.

java.arg.90=-Dcom.sun.management.jmxremote=true
java.arg.91=-Dcom.sun.management.jmxremote.port=9098
java.arg.92=-Dcom.sun.management.jmxremote.rmi.port=9098
java.arg.93=-Dcom.sun.management.jmxremote.authenticate=false
java.arg.94=-Dcom.sun.management.jmxremote.ssl=false
java.arg.95=-Dcom.sun.management.jmxremote.local.only=false
java.arg.96=-Djava.rmi.server.hostname=10.10.10.92  (the IP address of my server running NiFi)

나는 이것을 / etc / hosts 에 넣었 지만 그것이 필요한지 의심 스럽습니다.

10.10.10.92   localhost

그런 다음 JMC를 시작할 때 다음 속성을 사용하여 원격 연결을 만듭니다.

Host: 10.10.10.92
Port: 9098
User: (nothing)
Password: (ibid)

덧붙여서 Custom JMX 서비스 URL을 클릭하면 다음이 표시됩니다.

service:jmx:rmi:///jndi/rmi://10.10.10.92:9098/jmxrmi

이것은 마침내 나를 위해 해냈습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.