오라클 JRockit 의 이해

오라클이 SUN 을 인수하면서 기존의 오픈소스 자바 이외의 상용 제품으로서의 자바 제품군이 출시되었다. 그럼 상용 자바는 오픈소스와 어떤 차이점이 있을까? 우선, 상용 자바는 미션 크리티컬한 환경에 적합한 서버급 환경에 최적화된 솔루션이라 할 수 있다.

오라클의 상용 자바 솔루션인 JRockit 은 자바의 단점으로 지적되온 메모리 관리와 Garbage Collection (이하 GC) 프로세스를 개선하여 엔터프라이즈 서버급에 최적화된 JVM 으로 특성화 되어 있다. JRockit 은 크게 JRockit Mission Control, JRockit Flight Recorder 그리고 JRockit Real-Time 으로 나뉘어 지는데, 본 글에서는 각 모듈에 대한 역할과 장점들을 살펴보도록 하겠다.

첫번째, JRockit Mission Control (이하 JMC)은 실행중인 JVM에 최소한의 오버헤드로 JVM 을 모니터링하고 관리하며 프로파일링하는 툴로서, 운영환경에 적합하도록 설계되었다. 동시에 여러개의 JVM 인스턴스를 모니터링하고 관리할 수 있으며 GC, 메모리와 CPU 사용량, JVM 내부 MBean 서버에 디플로이된 MBean 정보들을 보여준다.

또한 메모리 릭 (memory leaks) 의 원인을 감지하는 툴도 포함되어 있다. 모든 정보는 그래프로 분석과 관리가 쉽도록 설계되어 있다. JMC 는 실시간 정보 뿐만 아니라 다음에 설명할 JRockit Flight Recorder 를 통해 기록된 파일로부터 분석에 필요한 정보들을 추출한다. 즉 문제 발생 시점으로 되돌아가 분석을 진행할 수 있는 타임머신 기능을 제공한다.

두번째, JRockit Flight Recorder (이하 JFR) 는 JVM 뿐만 아니라, 그 위에 실행되는 어플리케이션까지 모니터링 하게 되는데, 이 정보들을 바탕으로 프로파일링을 통해 JVM 문제의 근본적인 원인 분석이 가능하다. 특히 JFR 사용시 어플리케이션 성능에 영향을 미치지 않아 (0.5%이하) 운영환경에 적용할 수 있다는 장점이 있다.

레코딩 엔진에서는 위에서 설명한 JMC 에서 분석하게될 레코딩 파일을 생성하는데, 나노 세컨드 단위로 모든 스레드 이력, 락, GC 에 관한 정보 외에 시스템에 관련된 엄청난 양의 데이터를 저장한다. 일상적인 데이터는 생략하고 특정 기준을 초과한 내용만 기록하거나, 특정 조건이 만족되면 자동적으로 실행되도록 설정할 수 있다. 오라클 지원은 상용 자바를 사용하는 최대 장점 중 하나인데, 문제 진단 및 분석시 JFR 의 레코딩 파일이 중요한 단서가 된다.

JFR 는 직접 디스크에 데이터를 기록, 저장하지 않는다. 대신 인메모리 버퍼에 기록하고 버퍼가 차면 디스크로 옮기는 과정을 거친다. 디스크에 기록되는 파일은 바이너리 포맷으로 최고 압축률로 JMC가 읽고 쓰기 효율적이다. 디스크에 쓰지 않도록 설정할 수도 있는데 이런 경우에는 버퍼가 circular 버퍼로 동작해서 오래된 데이터부터 지워지게 된다.

세번째, 통신, 금융 산업같이 응답시간에 민감한 고성능 환경을 요구하는 산업 분야에서 자바의 많은 장점에도 불구하고 자바기술로 확장하길 꺼려하는 이유 중 하나가 예측 불가능한 GC 때문이다. 그러나 JRockit Real-Time(이하 JRT) 이 제공하는 Deterministic GC 를 이용하면 비용이 비싼 레거시 시스템을 GC 와 트랜잭션 지연(transaction latency) 문제 없이 유연한 자바기반 시스템으로 바꾸는 것이 가능하다.

실제로 Deterministic GC 를 이용해 실시간 시스템을 구현함으로써 성능향상을 보여준 사례들은 엄청나게 많다. 자동 메모리 관리 기술을 이용하여 트랙잭션 지연을 최소화 하는것이 가능한 동적인 Deterministic GC 는 최소 멈춤시간(pause time)과 제한된 횟수의 멈춤현상(pause)을 보장한다. GC가 발생할때 실행 중인 어플리케이션의 최대 지연시간을 낮추는 원리이다.

이런 짧은 멈춤 시간은 일반적인 GC와 비교했을때 성능에 영향을 덜 미치게 된다. 또 한가지, 성능을 보장하는 원리는 점직적인 최적화 (Progressive optimization)를 통해 메모리 이용을 보완하는 것이다. 실행 초기보다 지속적으로 성능이 향상되는데, JVM 은 자동적으로 어플리케이션 실행 조건과 환경에 맞추어져 최적의 성능을 보장하게 된다.

원리는 다음과 같다. 각 메소드를 컴파일하고 플랫폼에 맞게 최적화된 머신코드로 변환하며, 실행 시 모니터링을 통해 가장 시간을 많이 소비하는 메소드를 확인하여 성능 병목현상(performance bottleneck) 을 미리 제거하게 되는 것이다. 이런 과정은 어플리케이션이 실행되는 내내 계속된다.

지금까지 상용 자바 중 JRockit 을 구성하는 JMC, JFR, JRT 의 역활과 장점들에 대해 알아보았다. 오픈소스 자바는 제품 보증 기간 (End-Of-Life)이 만료하면 해당하는 버전에 대한 패치을 받을 수 없으며 접근이 금지되는 것은 물론, 오라클의 지원을 받을 수 없다. 즉, 오픈소스 자바로 서비스를 하다가 자바에 문제가 생겼을 시, 오라클의 지원없이 모든 문제를 스스로 해결해야 함을 의미한다.

자바 기반 서비스가 점차 확대되는 상황에서 오픈소스 자바의 사용은 안정적인 서비스의 위협요인이 될 수 있다. 상용 자바로 안정적이며 효율적으로 자바 기반 서비스를 운영해 보는것은 어떨까. JRockit 은 최저 비용으로 강력하고 안정적인 시스템을 구성하는 유일한 솔루션이 될 것이다.

저작권자 © 데일리그리드 무단전재 및 재배포 금지