EC2의 CoreOS 내에서 실행되는 Docker의 Play 애플리케이션 프로파일 측정

EC2에서 CoreOS를 실행하고 거기에서 Docker 컨테이너를 실행하는 경우 JVM의 프로필을 사용하고 싶었습니다.
아무래도 Flight Recorder가 잘 작동하지 않는 것 같아서 EC2의 Docker 환경에서 움직이는 것을 확인해 보았습니다.

EC2에서 CoreOS를 시작합니다.



여기 CoreOS 공식 사이트 에서 적절하게 CoreOS 이미지를 선택하여 부팅합니다.



※ 그런 버튼(오른쪽의 Launch Stack)을 누르면 CloudFormation에서 여러 대 기동하게 되므로 주의. AMI 링크를 눌러 시작합니다.

EC2 인스턴스의 생성은 여러 곳에서 해설되어 있으므로 그쪽을 참조하여 기동해 주세요.

CoreOS에 로그인하고 Docker 인스턴스를 시작합니다.



로그인은 EC2에 ssh하는 표준 방법으로. CoreOS의 이미지는 사용자명 core 이므로 주의.

Docker 인스턴스 시작



Docker의 이미지는 내가 만든 CentOS에 Oracle JDK8이 설치된 다음을 이용합니다.
docker run -p 80:9000 -id --name seed -v /var/tmp:/var/tmp chidakiyo/centos7-oracle-jdk8 /bin/bash

Docker에 연결


docker exec -it seed /bin/bash

Docker 내에서 Play 애플리케이션을 시작합니다.



필요한 모듈 설치


yum -y install git unzip

Play의 간단한 애플리케이션 얻기



샘플에서 얻은 것을 이용합니다.
git clone https://github.com/chidakiyo/sample-seed.git

Play 애플리케이션 빌드


cd sample-seed  

./activator dist

Play 애플리케이션 배포


unzip target/universal/play-scala-1.0-SNAPSHOT.zip -d /var/tmp/

Play 애플리케이션을 비행 레코더를 활성화하고 실행


cd /var/tmp/play-scala*  

./bin/play-scala -J-XX:+UnlockCommercialFeatures -J-XX:+FlightRecorder

Flight Recorder에서 프로필 가져오기 수행



PID 조사


jcmd

를 실행하고 play.core.server.ProdServerStart

비행 레코더로 프로필 가져오기


jcmd {PID} JFR.start delay=1s duration=30s filename=/var/tmp/record_1.jfr

위의 예에서는 30초 동안만 프로필을 가져옵니다. /var/tmp 아래에 파일을 출력합니다.

JFR 파일 검색 및 표시



파일 검색



파일의 취득은 scp등을 이용해 취득해 주세요.
Docker의 /var/tmp/ 디렉토리는 CoreOS의 /var/tmp를 마운트하고 시작하고 있으므로 CoreOS 내의 /var/tmp 디렉토리에서 얻을 수 있으면 OK입니다.

파일 보기



Oracle Java(7 이상)가 설치된 환경에서 .jfr 파일을 두 번 클릭하여 실행합니다.



깨끗한 그래프 등 JVM에 대한 자세한 정보를 볼 수 있었습니다.

좋은 웹페이지 즐겨찾기