서버 환경
- Naver Cloud Platform(nCloud) Compact Server
- ubuntu 16
- docker (openJDK-8 베이스 이미지로 만든 프로젝트가 올라갑니다)
프로젝트
- Spring boot 2.2
- maven
- JDK 8
모니터링 환경
- Windows10 PRO
- Oracle JDK 8
- jConsole
도커 이미지 작성
도커 이미지를 만들 때 참조하는 DockerFile을 다음과 같이 작성했습니다.
FROM ascdc/jdk8
ADD delfood.jar delfood.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["java",\
"-Dcom.sun.management.jmxremote.port=[접근할 포트]",\
"-Dcom.sun.management.jmxremote.rmi.port=[접근할 포트]",\
"-Dcom.sun.management.jmxremote.ssl=false",\
"-Dcom.sun.management.jmxremote.authenticate=false",\
"-Dcom.sun.management.jmxremote=true",\
"-Djava.rmi.server.hostname=[서버 공인 IP]",\
"-jar",\
"./delfood.jar", \
"--spring.datasource.password=$password", \
"--spring.datasource.username=$username", \
"--spring.datasource.url=$datasource", \
"--spring.redis.host=$redishost"
외부에서 실행중인 JVM에 접근하기 위해서는 -jar 위쪽에 있는 옵션들이 필요합니다.
"-Djava.rmi.server.hostname=[서버 공인 IP] |
해당 jar파일을 실행하는 서버의 Public IP를 적어주시면 됩니다.
"-Dcom.sun.management.jmxremote.authenticate=false" |
위 옵션을 false로 지정해야 아이디, 패스워드나 키 파일을 사용하지 않아도 모니터링을 할 수 있습니다.
"-Dcom.sun.management.jmxremote.port=[접근할 포트]" "-Dcom.sun.management.jmxremote.rmi.port=[접근할 포트]" |
이 부분에 있는 접근할 포트는 자유롭게 사용해도 좋지만 두 포트가 모두 같아야 합니다. 저는 85번 포트를 사용하였습니다.
[java.net.MalformedURLException: Local host name unknown:...] 이 발생한다면?
가끔 이 IP를 인식하지 못하는 오류가 발생하는데 서버의 /etc/hosts 파일에 아래와 같은 내용을 추가해주시면 됩니다.
[서버 공인 IP] [호스트 이름]
호스트 이름을 모르겠다면 다음 명령어로 알 수 있습니다.
echo hostname
hosts파일을 수정했다면 다음과 같은 모양이 됩니다.
도커 이미지 실행
도커 이미지를 실행시킬 때는 포트를 열어주는 작업이 필요합니다.
docker run -d --name delfood_boot -p 80:80 -p 85:85 [이미지:태그]
80번 포트는 서비스 포트입니다. 모니터링과는 관계 없습니다.
85번포트가 제가 아까 지정한 모니터링 포트입니다. 해당 포트를 열어주어야 jConsole로 접근할 수 있습니다.
docker ps 명령으로 정상적으로 실행되었는지 확인한 후 원격에서 jConsole로 접근해보겠습니다.
jConsole 실행
위 JVM옵션을 모두 적용했다면 Username, Password 없이 JVM에 접근할 수 있습니다. 아래와같이 입력 후 Connect 버튼을 눌러주세요.
아래와 같이 Secure connection failed가 나오는 것은 SSL 없이 연결하기 떄문입니다. Insecure connection버튼을 눌러주세요.
아래와 같은 화면이 나온다면 성공적으로 접속한 것입니다.
'Java > 기초' 카테고리의 다른 글
TDD를 소개합니다 (11) | 2020.05.15 |
---|---|
[Java] Java는 Call by reference가 없다 (25) | 2020.03.24 |
[Java] Java의 GC(Garbage Collection)방법과 종류 (1) | 2019.10.17 |
[Java] 이클립스 설치방법 - JDK 1.7 설치, Eclipse Luna 설치 (0) | 2019.08.23 |
[Java] String .split(".")결과가 공백이 나올 때 해결방법 (1) | 2019.08.21 |
댓글