programing

JVM에서 jconsole을 사용하여 액세스하기 위해 JMX를 활성화하려면 어떻게 해야 합니까?

lovecodes 2022. 7. 30. 18:21
반응형

JVM에서 jconsole을 사용하여 액세스하기 위해 JMX를 활성화하려면 어떻게 해야 합니까?

jconsole을 사용하여 액세스하기 위해 JVM에서 JMX를 활성화하려면 어떻게 해야 합니까?

관련 매뉴얼은 다음 URL에서 찾을 수 있습니다.

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반드시 필요한 것은 아니지만, 이것이 없으면 Ubuntu에서는 동작하지 않습니다.오류는 다음과 같습니다.

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 를 참조해 주세요.

또한 모든 사용자가 액세스할 수 있도록 하는 경우에도 주의해야 합니다. 그러나 로컬 머신에서 JVM을 추적하는 데만 사용하는 경우에는 문제가 되지 않습니다.

업데이트:

서버에 접속할 수 없는 경우도 있었습니다.이 파라미터도 함께 설정하면 이 문제는 수정되었습니다.-Djava.rmi.server.hostname=127.0.0.1

도커 컨테이너에서 실행하면 연결 시 많은 추가 문제가 발생하므로 도움이 되었으면 합니다.다음에 설명하는 다음 옵션을 추가해야 했습니다.

-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

도커_호스트_아이피

로컬에서 jconsole을 사용하는 것과 달리 컨테이너 내에서 볼 수 있는 것과 다른 IP를 애드버타이즈해야 합니다.교환이 필요합니다.${DOCKER_HOST_IP}도커 호스트의 외부적으로 확인 가능한 IP(DNS 이름)를 사용합니다.

JMX 리모트 및 RMI 포트

JMX 에서는, 접속의 조정시에 다른 포토를 사용해 데이터를 전송하는 리모트 관리 인터페이스(jstat)에도 액세스 할 필요가 있는 것 같습니다.에서는 눈에 확 띄는 곳이 없었습니다.jconsole이 값을 설정합니다.링크된 문서에서 프로세스는 다음과 같습니다.

  • 접속을 시도하다jconsole로깅이 네이블로 되어 있음
  • 실패하다
  • 어느 포토를 특정합니다.jconsole사용 시도
  • 사용하다iptables/firewall포트 접속을 허용하기 위해 필요한 규칙

이 방법은 효과가 있지만 자동화할 수 있는 솔루션은 아닙니다.jconsole에서 Visual VM으로의 업그레이드를 선택했습니다.이것에 의해, 명시적으로 포토를 지정할 수 있기 때문입니다.jstatd가 실행되고 있습니다.VisualVM에서 새 원격 호스트를 추가하고 위에서 지정한 값에 해당하는 값으로 업데이트합니다.

리모트 호스트 추가

그런 다음 새 원격 호스트 연결을 마우스 오른쪽 버튼으로 클릭하고Add JMX Connection...

JMX 접속 추가

체크박스를 켜는 것을 잊지 마세요.Do not require SSL connection접속할 수 있으면 좋겠습니다.

참고로 최신 버전 Java 6에서는 jconsole이 JMX 명령 없이 시작된 후에도 실행 중인 프로세스에 접속할 수 있습니다.

프로파일러를 포함하여 실행 중인 프로세스에 대한 풍부한 정보를 제공하므로 jvisualvm도 고려하십시오.

WAS ND 7.0 사용 중

JConsole에서 다음 인수를 모두 모니터링해야 합니다.

    -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

Linux 에서는 다음 파라미터를 사용했습니다.

-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가 .

이하의 옵션이 유효합니다.

-Dcom.sun.management.jmxremote=true
-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
-Djava.rmi.server.hostname={host name}

서버에서 9010 포트를 여는 것을 잊지 마십시오.

sudo ufw allow 9010/udp
sudo ufw allow 9010/tcp
sudo ufw reload

아래 명령줄 파라미터와 함께 사용합니다.

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

Linux 서버에서 imx 연결이 성공하지 못할 수 있습니다.이는 클라우드 Linux 호스트의 /etc/module에서 호스트 이름이 호스트 주소로 확인되도록 하기 때문입니다.

이를 수정하는 가장 좋은 방법은 네트워크 내의 다른 머신에서 특정 Linux 서버에 ping을 실행하여 해당 호스트 IP 주소를 사용하는 것입니다.

-Djava.rmi.server.hostname=IP address that obtained when you ping that linux server.

단, ifconfig.me을 사용하여 Linux 서버에서 얻은IP 주소는 절대 신뢰하지 마십시오.이 IP는 호스트 파일에 있는 마스킹된 IP입니다.

다음 명령줄 매개 변수를 사용하여 Java 응용 프로그램을 실행합니다.

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

jmx 호스트에서 디지털 인증서를 설정하지 않으려면 -Dcom.sun.management.jmxremote.ssl=false 매개 변수를 사용하는 것이 중요합니다.

IP 주소가 192.168.0.1인 시스템에서 애플리케이션을 시작한 경우 jconsole을 열고 원격 프로세스 필드에 192.168.0.1:8855를 입력한 후 연결을 클릭합니다.

1단계: 다음 파라미터를 사용하여 응용 프로그램을 실행합니다.

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

위의 인수는 응용 프로그램을 포트 9999에 바인드합니다.

2단계: 명령 프롬프트 또는 단말기에서 jconsole 명령을 실행하여 jconsole을 실행합니다.

원격 프로세스:'를 선택하고 URL을 {IP_Address:9999로 입력한 후 연결 버튼을 클릭하여 원격 애플리케이션에 연결합니다.

링크를 참조하면 완전한 응용 프로그램을 볼 수 있습니다.

원격 프로세스 옵션을 사용하여 로컬 프로세스 JCONSOLE 실행

지역 내에서의 운영은 나에게 효과가 있었다.

VM Args에 추가했습니다.

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=6001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.rmi.port=6001
  • 인텔리제 터미널에서 J콘솔을 오픈했습니다.
  • 로컬에서 모든 PID가 회색으로 표시되었습니다.
  • 그래서 리모트 프로세스를 선택하고 host - localhost: 6001을 사용하여 로그인했습니다.
  • 사용자 이름과 패스워드를 공백으로 유지합니다.
  • 그런 다음 connect를 클릭합니다.

  • 포트 6001에서 다른 프로세스가 실행되고 있지 않은지 확인합니다.다른 포트도 사용할 수 있습니다.

먼저 Java 프로세스가 JMX 파라미터를 사용하여 이미 실행되고 있는지 확인해야 합니다.다음을 수행합니다.

ps -ef | grep java

감시할 필요가 있는 Java 프로세스를 확인합니다.jmx rmi 파라미터 Djmx.rmi.registry.port=xxxxxx가 표시되는 경우 jmx 연결로 원격으로 연결합니다.

jmx rmi 포트를 통해 실행되지 않는 경우 다음 파라미터를 사용하여 Java 프로세스를 실행해야 합니다.

-Djmx.rmi.registry.port=1234 -Djmx.rmi.port=1235 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

주의: 포트 번호는 선택한 항목에 따라 달라집니다.

jmx connection 제m 、 jmx connection 、 jmx connection 、 jmx connection 、 jmx connection 。 포트입니다.1234.

는 이 문제를 안고 GitHub 프로젝트를 만들어 올바른 설정을 테스트하고 알아냈습니다.

에는 작업 중인 내용이 있습니다.Dockerfile및 " " " " " ""를 선택합니다.docker-compose.yml빠른 테스트에 사용합니다.

언급URL : https://stackoverflow.com/questions/856881/how-to-activate-jmx-on-my-jvm-for-access-with-jconsole

반응형