visualvm 및 JMX를 사용한 리모트 감시
jvisualvm(또는 jconsole)을 사용하여 원격으로 실행되는 Java(스프링 부트) 응용 프로그램을 모니터링하고 싶습니다.로컬에서 실행할 때 jvisualvm과 jconsole에서 모두 관리 대상 콩을 볼 수 있습니다.원격 실행 시 연결할 수 없습니다.몇 가지 다른 Java 프로세스(예: spring xd)로 시도했습니다.SO와 구글에서 답을 찾는 것은 도움이 되지 않았다.
JAVA_OPTS(리모트호스트상의)는 다음과 같습니다.
$ echo $JAVA_OPTS
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99
그리고, 다음과 같이 프로그램을 기동합니다(이것은 봄 xd용이지만, 다른 Java 프로그램에서도 같은 문제가 발생하고 있습니다).
$ bin/xd/xd-singlenode
서버 프로세스에서 다음 옵션이 선택되는 것 같습니다.
$ ps -ef | grep single
vagrant 22938 19917 99 06:38 pts/2 00:00:03 /usr/lib/jvm/java-8- oracle/jre/bin/java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99 -Dspring.application.name=admin -Dlogging.config=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config///xd-singlenode-logger.properties -Dxd.home=/home/vagrant/spring-xd-1.1.0.RELEASE/xd -Dspring.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dxd.config.home=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dspring.config.name=servers,application -Dxd.module.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config//modules/ -Dxd.module.config.name=modules -classpath (...)
리모트 호스트(ubuntu linux vm)의 Java 버전은 다음과 같습니다.
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
로컬 머신(Mac OS)의 Java 버전은 약간 다릅니다.
$ java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
jvisualvm에서 다음과 같이 원격 연결을 추가합니다(SSL 연결과 사용하지 않음 모두 시도됨).
다음은 jvisualvm에서 제공하는 오류 메시지입니다.
명령어를 사용하여 로컬호스트에서 리모트호스트에 접속할 수 있습니다.telnet 192.168.59.99:9010
(리모트 프로세스가 실행 중일 때), 방화벽의 문제는 아닌 것 같습니다.
어떤 도움이라도 대단히 감사합니다.
다음 JVM 옵션을 사용하십시오.
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.59.99
Jconsole에서 다음을 사용하여 연결합니다.
service:jmx:rmi:///jndi/rmi://192.168.59.99:9010/jmxrmi
Arnab Biswas의 Anwser는 내 경우 작동하지 않는다.1시간의 조사 결과, JMX는 RMI 상에서 동작하고 있는 것을 알 수 있었습니다.그 때문에, JMX는 다음의 2개의 포토를 사용하고 있습니다.
- JMX 접속 포트(
-Dcom.sun.management.jmxremote.port
) - (무해한) 로밍 RMI 데이터 포트(
-Dcom.sun.management.jmxremote.rmi.port
)
RMI 데이터 포트는 다음 위치에서 랜덤 포트 시작을 엽니다.1099
RMI 레지스트리와 RMI 서버가 사용하는 포트를 같은 포트로 설정하면 터널링이 훨씬 쉬워집니다.
그래서 나는 더해야 한다.-Dcom.sun.management.jmxremote.rmi.port=9010
JVM 옵션
그리고 다음 JVM 옵션을 사용해야 합니다.
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.rmi.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.59.99
상세보기:
- http://hirt.se/blog/?p=289
- https://realjenius.com/2012/11/21/java7-jmx-tunneling-freedom/
- https://medium.com/codefountain/monitoring-using-java-visualvm-a25203d36390
자세히 논의해 보겠습니다.방금 리모트 서버에 접속했습니다.당신은 당신의 jar 파일이 있는 폴더로 가야 합니다.X.jar 파일을 감시하고 usr/local/folder에 있다고 가정합니다.먼저 CD를 그 폴더에 넣습니다.그런 다음 어떤 jdk가 실행 중인지 확인합니다.Linux에서 어떤 Java 명령을 실행하면 찾을 수 있습니다.리모트 서버의 명령줄(일반적으로 Pu 사용)TTy cmd, MobaXterm 사용)pu에서TTy cmd 쓰기:
java -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 -Djava.rmi.server.hostname=192.168.10.0 -jar X.jar
이제 자세히 설명하겠습니다.여기서 jmx는 rmi를 사용하기 때문에 rmi 포트를 정의할 필요가 있습니다.rmi 포트를 정의하지 않으면 랜덤 포트가 자동으로 할당됩니다.그러면 연결이 잘 안 돼요.인증과 ssl은 문제가 발생하기 때문에 사용하지 않습니다.원하시면 직접 드셔보셔도 됩니다.호스트명에는, 리모트호스트명(IP 주소)을 지정할 필요가 있습니다.이제 로컬 컴퓨터에 있는 visualvm을 사용합니다.일반적으로 다음 폴더에서 찾을 수 있습니다.
C://Program Files/Java/jdk1.8.0_201/bin
그렇지 않은 경우 다운로드하여 디렉토리에 붙여넣습니다.로컬 PC에서 visualvm을 실행합니다.local, remote 등의 옵션이 표시됩니다."remote" 옵션에서 "Add Remote Host"를 선택합니다.호스트명을 추가합니다.제 경우는 192.168.10.0이었습니다.그런 다음 마우스 오른쪽 버튼을 클릭하고 "Add jmx connection"을 선택합니다.창이 열리고 포트 번호를 삽입합니다.제 경우는 9010이었습니다.임의의 포토 번호를 지정할 수 있습니다."SSL 연결 필요 없음"을 선택하고 보안 자격 증명을 선택하지 마십시오.인증이 거짓임을 속성에 추가했기 때문입니다.이제 연결하면 연결이 원활하게 진행됩니다.제안 하나 더 할게요.jstatd connection을 사용하여 연결할 수 있습니다.하지만 효과가 없어요.출력은 표시되지 않습니다.아마도 자바8의 문제나 그 정도일 것이다.메모리의 상세를 감시하려면 , 「visualvm.exe」의 갱신 버전이 필요합니다.다운로드 할 수 있어요.인증 및 SSL을 사용하여 연결할 수 있습니다.Authentication=true를 사용하는 자세한 절차는 다음 링크에서 설명합니다.Connect to remote JMX Agent with authentication
authentication=true와 SSL=true를 모두 사용하는 자세한 절차는 JConsole SSL/TLS with Password Authentication 링크에서 설명합니다.
언급URL : https://stackoverflow.com/questions/30069643/remote-monitoring-with-visualvm-and-jmx
'it-source' 카테고리의 다른 글
깊이를 알 수 없는 복잡한 사전을 완전히 탐색하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
---|---|
.getJ에서 인코딩을 설정하는 방법SON jQuery (0) | 2023.03.17 |
Angular를 연장하는 권장 방법은 무엇입니까?JS 컨트롤러? (0) | 2023.03.17 |
React.js 구성 요소 확장 (0) | 2023.03.17 |
'useState' 후크를 사용할 때 React DevTools를 사용하여 React 다중 상태의 '필드' 이름을 볼 수 있는 방법이 있습니까? (0) | 2023.03.17 |