제니퍼의 다이나믹 메소드 프로파일 기능 어떻게 활용하면 될까요?
다이나믹 메소드 프로파일(Dynamic method profile)은 애플리케이션 서버를 재시작하지 않고도 트랜잭션의 프로파일링 레벨을 증가시키거나 감소시킬 수 있는 JENNIFER의 강력한 기능입니다.
우선 프로파일이란 무엇일까요? 소셜 네트워크에서 말하는 프로파일이란 사람을 개인 프로필로서 설명하고 윤곽을 나타내기 위해 주어진 정보를 말합니다. 이와 유사한 방식으로 트랜잭션 프로파일에서는 개별 메소드의 응답 시간, 매개 변수 및 반환 값 등과 같은 트랜잭션에 대한 정보가 포함되어 있습니다. 프로파일 정보에서는 코드의 클래스가 트랜잭션을 완료하기 위해 사용하는 트랜잭션 동작, 실행된 메소드 및 각 메소드를 실행하는 데 걸리는 시간, 마지막으로 데이터베이스에 대해 실행된 SQL 쿼리를 실행하는데 걸리는 시간을 담고 있습니다. 이 모든 데이터는 트랜잭션의 작동 방식을 이해하고 문제의 근본 원인을 찾는 데 매우 유용하게 사용됩니다.
이번 아티클에서는 JENNIFER의 Dynamic Method Profiling 기능을 사용하는 방법에 대해 알아보겠습니다.
Transaction
자바 애플리케이션 서버의 트랜잭션은 브라우저에서 요청된 URL의 최종 결과 페이지를 만드는 데 필요한 일련의 프로세스를 뜻합니다. 다음 이미지는 트랜잭션 처리 예를 보여 주고 있습니다.
브라우저의 요청은 여러 클래스에서 처리되며, 이 경우 ClassA에서 classD로 처리되고 두 클래스가 데이터베이스(E)를 호출합니다. 모든 클래스에 대해 수집된 프로필 데이터는 다음과 같습니다.
그러나 일반적인 상황에서 모든 클래스의 응답 시간을 측정하면 응답시간을 저하시키는 과도한 오버 헤드가 발생할 수 있습니다. 따라서 JENNIFER는 기본 조건에서 최소 로직의 응답 시간만 측정합니다. 위의 그림에서는 빨간색으로 표시된 항목만 추적됩니다. 그런 다음 다음 프로파일 데이터를 얻을 수 있습니다.
경우에 따라 기본(최소) 프로파일 정보가 충분하지 않을 수 있으며 현재 진행 중인 거래에 대한 추가 정보가 필요할 수 있습니다. 이 경우 Dynamic Profile을 사용하여 추가 정보를 얻을 수 있습니다.
Using the Dynamic Method Profile
Dynamic profile 기능을 설명하기 위해 다음 예를 확인해 보겠습니다. 사용자가 자신의 계정 영역에 액세스하려고 합니다. 하지만 그가 자신의 계정에 로그인 하려고 하니 서버의 응답 시간이 오래 걸립니다. 만약 JENNIFER가 시스템에 설치되어 시스템을 모니터링하고 있다면, JENNIFER의 dynamic method profile 을 사용하여 이 문제의 원인을 찾을 수 있습니다. 응답 시간이 느린 원인은 느린 트랜잭션(높은 응답시간)인 것 같으므로, X-View 차트 상위에 위치한 트랜잭션을 확인해 보겠습니다.
시스템 평균 응답 시간 및 TPS에 따라 X-View 차트의 상단 쪽에 트랜잭션 수가 많을 수 있습니다. X-View차트를 변경하여 검색 범위를 좁히거나 필터 기능을 사용하여 특정 기준으로 트랜잭션을 검색할 수 있습니다. 이 기능은 나중에 사용해 보도록 하겠습니다. 이 시스템에서는 JENNIFER가 HTTP 세션에서 사용자 ID를 추출하도록 구성되어 있으므로, 우리는 그의 USER ID를 사용하여 문제를 겪고 있는 특정 사용자와 관련된 트랜잭션을 검색하려고 합니다.
트랜잭션을 검토하고 응답 시간 별로 정렬하면 welcome page의 응답 시간이 응용 프로그램의 평균 응답 시간에 비해 상당히 오래 걸린다는 것을 즉시 관찰할 수 있습니다.
그러나 앞부분에서 설명한 바와 같이(일반적인 상황에서 모든 클래스의 응답 시간을 측정하면 응답시간을 저하시키는 과도한 오버 헤드가 발생할 수 있기에) JENNIFER는 기본 프로파일 정보만 표시합니다. 시작 페이지의 프로파일을 확인하면 트랜잭션 시간의 99%가 애플리케이션 로직(코드 레벨)에서 발생했음을 알 수 있습니다. JENNIFER는 응답 시간 백분율과 “Not Profiled” 메시지에 대한 디테일한 정보를 보여주지 않습니다.
현시점에서는 우리는 응답 시간에 대한 문제가 데이터베이스나 외부 호출과 관련이 없으며 애플리케이션 로직 그 자체와 관련이 있음을 알 수 있습니다. 일부 클래스에서는 메소드가 높은 응답 시간을 발생시키고 있으며 우리는 Dynamic method profile을 사용하여 트랜잭션에 대한 추가 정보를 얻을 수 있습니다.
Dynamic profile 기능을 적용하는 방법은 여러 가지이며 특정 메소드, 특정 클래스 또는 전체 패키지에 대한 프로파일을 적용할 수도 있습니다. 프로파일은 많은 클래스와 메소드에 대한 정보를 수집하기 때문에 오버헤드의 원인이 될 수 있으므로 패키지 범위에 적용하는 것은 권장되지 않습니다. 몇 분 동안 활성화할 수 있지만 분석을 마친 후에는 비활성화해야 합니다.
프로파일링 설정을 적용한 후 X-View로 돌아가서 새 트랜잭션이 도착할 때까지 기다려 봅니다. 이전과 동일한 필터 방법을 적용하여 원하는 트랜잭션을 신속하게 확인할 수 있습니다. 하지만, 이번에는 우리에게 이용 가능한 추가 정보를 확인할 수 있습니다. 이 트랜잭션으로 실행되는 각 클래스/방법과 각 클래스의 소요 시간을 확인할 수 있습니다. 이를 통해 우리는 “loadProfile” 방법이 응답 시간이 높아지는 이유를 알 수 있습니다.
Method Param/Return
JENNIFER는 수많은 사용자 분석을 통해 사용자들이 Profile을 분석하면서 메소드의 Parameter와 Return값을 쉽게 설정하여 보고자 한다는 사실을 알게 되었습니다. 이를 위해 콜트리에서 원하는 매서드를 선택하여 쉽게 설명할 수 있는 기능을 제공하고 있습니다.
예를 들어 함수에 전달된 매개 변수를 알고 싶으면 X-View 호출 트리에서 메소드를 마우스 오른쪽 버튼으로 클릭하고 “메소드 프로파일”을 선택하여 메소드 프로파일 팝업을 열 수 있습니다. 반환 값 또는 매개 변수를 추적하거나 둘 모두를 선택합니다.
다음에 메소드를 호출할 때 JENNIFER는 X-View 콜 트리의 메소드 옆에 파라미터 또는 반환 값을 표시하는 것을 확인할 수 있습니다.
이번 아티클에서는 제니퍼의 강력한 기능인Dynamic method profiled의 사용과 활용법에 대해 정리해 봤습니다. 제니퍼 Dynamic method의 활용법이 많은 도움을 드렸는지 모르겠습니다. 제니퍼 기능에 대한 궁금중이나 질문이 있다면 제니퍼소프트 기술팀으로 연락하여 주시기 바랍니다.