본문 바로가기
AWS

ec2 리눅스 서버에 jconsole과 visualVM 원격접속 [1] (use jconsole and visualVM to remote connect ec2 linux server)

by 코딩공장공장장 2021. 1. 19.

안녕하세요. 오늘은 ec2 리눅스 서버에 jconsole 원격 접속 방법을 알려드리겠습니다. 

 

요즘 메모리 에러가 자주 나타나서 자바의 메모리를 공부하고

 

메모리 관리할수 있는 툴에 대해 알아보았는데 jconsole과 visualVM이라는게 있었습니다. 

 

jconsole과 visualVM이 GUI형태로 메모리 사용량을 제공해주기 때문에 

 

원격으로 접속만 할 수 있다면 굉장히 유용한 툴이 될 것 같았습니다. 

 

몇일 동안 삽질을 반복하며 시도하였고 결국에는 다행히 원격접속에 성공하였습니다. 

 

 

정말 많이 삽질했기때문에 제 경험을 토대로 하나부터 열까지 설정 하나하나 알려드리도록 하겠습니다.

 

 

우선 저의 환경을 알려드리겠습니다. 

 

서버

OS : 아마존 리눅스2

WAS : tomcat7

java8

 

로컬

윈도우, 자바8

 

 

jconsole에 접속하는 설정과 visualVM에 접속하는 설정 과정은 같기 때문에 구분없이 설명하겠습니다.

 

[서버에 JMXRmote.jar 파일 다운]

 

먼저, 로컬에서 톰캣 다운로드 페이지에 가서 자신의 버전에 맞는 jmx remote.jar 파일을 다운받아주세요.

 

tomcat.apache.org/download-70.cgi

 

Apache Tomcat® - Apache Tomcat 7 Software Downloads

Welcome to the Apache Tomcat® 7.x software download page. This page provides download links for obtaining the latest version of Tomcat 7.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

 

 

그리고 해당 파일은 서버의 톰캣 home 디렉토리의 lib 폴더에 넣어주세요.

 

저는 파일질라를 통해 직접 넣어줬습니다. 

 

 

 

위 처럼 catalina-jmx-remote.jar 파일이 톰캣 홈디렉터리의 lib폴더에 들어간것 보이시죠.

 

자신의 톰캣 홈디렉토리의 lib폴더를 찾아서 넣으셔야합니다. 

 

 

 

 

 

 

 

[서버에 setenv.sh 파일 작성]

 

서버의 톰캣 홈디렉토리의 bin폴더에서 setenv.sh를 작성하겠습니다. 

 

vi /usr/local/tomcat7/bin/setenv.sh

 

저 같은 경우 톰캣의 홈디렉토리가 /usr/local/tomcat7  이기 때문에 위와같은 경로를 설정한 것입니다.

 

자신의 톰캣 홈디렉토리를 적어주세요.

 

 

그런 다음 vi 편집기가 열리면 

 

#!/bin/sh

JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=자신의서버아이피 -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"

 

이걸 입력해주시고 -Djava.rmi.server.hostname=자신의서버아이피 이부분에는 ec2 의 퍼블릭 ip를 넣어주세요.

 

 

 

 

 

퍼블릭 ipv4를 입력해주시면 됩니다.

 

그리고 많은 포스팅에서 빠진 중요한 부분입니다. 방금 만든 setenv.sh 파일에 755 실행속성을 추가하겠습니다.

 

chmod 755 /usr/local/tomcat7/bin/setenv.sh

 

 

 

[톰캣의 server.xml 수정]

 

그런 다음 톰캣 홈디렉토리의 conf 폴더에서 server.xml에 밑의 내용을 추가해야합니다.

 

 vi /usr/local/tomcat7/conf/server.xml

위처럼 자신의 톰캣 홈디렉터리의 conf 폴더에 위치한 server.xml을 vi편집기로 열고

 

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/>

 

<Listener classnName= ....... > 이 부분을 추가해주면 됩니다.<server port="8005" .........> 밑에 추가해주면 됩니다.

 

<server port="8005" shutdown=""SHUTDOWN">이 코드는 추가하는게 아니라 원래 있는 내용입니다.

 

 

 

[로컬에서 AWS 콘솔에서 보안그룹 편집]

 

이제 로컬로 돌아와서 AWS에 콘솔에서 보안그룹을 편집하겠습니다.

 

우리의 ec2 인스턴스가 사용하고 있는 보안그룹을 눌러줍니다.

 

 

보안그룹에 들어왔다면 인바운드 규칙 편집을 눌러주시고

 

 

 

 

위와같이 9840포트와 9841 포트를 열어주세요. 

 

 

 

자 이제 설정은 끝났습니다. 

 

 

톰캣을 재시작시켜주시고

 

 

먼저 jconsole에 접속하겠습니다.

 

로컬의 자바 홈디렉터리 bin 폴더로 가서 jconsole 파일을 열어주세요.

 

 

모자이크 된 부분에 ec2의 public ip를 적어주시고 포트를 9840 또는 9841로 입력하여 접속해줍니다.

 

 

 

 

우리는 지금 ssl설정을 false로 하였기때문에 Insecure connection을 클릭하여 들어옵니다.

 

 

 

 

자 이제 이런 화면을 볼수 있을 것입니다. 

 

 

힙, cpu, 쓰레드 사용량에 대해 알 수 있고 시간을 설정하여 그래프로 볼수 있으니 굉장히 편리할 것입니다. 

 

 

 

 

 

 

 

다음은 visualVM으로 접속하겠습니다.

 

 

로컬의 자바 홈디렉토리의 bin폴더에서 jvisualvm파일을 실행시켜주세요.

 

 

 

 

 

그런 다음 [Remote]라고 적혀있는 메뉴에서 오른쪽 클릭하여 Add HOST를 눌러주세요.

 

 

 

 

 

그러면 위와 같은 화면이 나타나는데 Host name: 영역에 ec2 인스턴스의 public IP를 적어주시고

 

Advanced Settings 를 클릭하여 위처럼 기본 설정된 Port 가 있으시면 Remove를 클릭하여 제거하고 OK를 눌러주세요

 

 

 

 

그러면 위와 같이 Remote 밑에 우리가 설정한 IP주소에 해당하는 아이콘이 하나 생길것입니다. 

 

 

 

 

 

 

방금 만든 아이피 주소 위에서 마우스 우클릭하면 위와 같이 Add JMX Connection.. 이라고 나타나는데 클릭해주면

 

 

 

 

 

위처럼 아이피주소 옆에 9840 또는 9841을 입력하고 다른 체크박스에는 아무것도 체크하지 마시고 OK를 눌러 

 

원격접속을 시도합니다.

 

 

 

정상적으로 연결이 되셨다면 위와 같은 화면을 얻게 되실것입니다.

 

 

 

자 이제 jconsole과 visualVM으로 AWS EC2 linux 서버에 원격접속을 해보았습니다. 

 

제가 굉장히 많이 삽질했던 부분은 setenv.sh를 설정하는 부분이었는데요. 

 

public IP를 입력해야 하는데 private IP를 입력하고, 또 server의 IP를 입력해야하는데

 

로컬의 IP를 입력하고, setenv.sh 파일에 실행권한을 부여하지 않은채로 이 시도 저 시도 하느라

 

외국 커뮤니티 글들도 많이 참조 했었는데, 결국 실행권한 부여하여 접속 성공했네요.....

 

 

다만, 지금 접속한 방법은 아이디 비밀번호 인증없이 접속한 것입니다. 

 

실제로 서버를 운영한다면 아이디나 비밀번호 인증도 없이 접속을 열어두면 안되겠죠. 

 

아이디 비밀번호를 설정하여 접속하는 방법은 밑의 링크를 참조해주세요.

 

글이 너무 길어 두개로 나눴습니다. 

 

developer111.tistory.com/36

 

ec2 리눅스 서버에 jconsole과 visualVM 원격접속 [2] (use jconsole and visualVM to remote connect ec2 linux server)

지난번 포스팅에서 원격지 서버에서 리모트 연결을 위한 설정을 하여 로컬서버에서 jconsole과 visualVM으로 접속을 하였습니다. 위의 포스팅과 연결되는 내용으로 이번 포스팅에서는 아이디 비밀

developer111.tistory.com

 

반응형