KR100920414B1 - 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법 - Google Patents

트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법 Download PDF

Info

Publication number
KR100920414B1
KR100920414B1 KR1020080050798A KR20080050798A KR100920414B1 KR 100920414 B1 KR100920414 B1 KR 100920414B1 KR 1020080050798 A KR1020080050798 A KR 1020080050798A KR 20080050798 A KR20080050798 A KR 20080050798A KR 100920414 B1 KR100920414 B1 KR 100920414B1
Authority
KR
South Korea
Prior art keywords
java
transaction
stack
code
class
Prior art date
Application number
KR1020080050798A
Other languages
English (en)
Inventor
김성조
Original Assignee
(주)제니퍼소프트
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)제니퍼소프트 filed Critical (주)제니퍼소프트
Priority to KR1020080050798A priority Critical patent/KR100920414B1/ko
Application granted granted Critical
Publication of KR100920414B1 publication Critical patent/KR100920414B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 방법에 관한 것으로서, 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 추적코드 작성부; 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 삽입위치 지정부; 상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 코드 로딩부; 상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 프로파일링 기록부; 저장된 상기 프로파일을 보여주는 프로파일 출력부를 포함하는 구성을 마련한다.
상기와 같은 시스템 및 방법에 의하면, 성능을 저하시키는 지점 등 프로그램 내에서 원하는 지점이 어떤 경로로 호출되어 실행되는지를 파악함으로써, 보다 손쉽게 프로그램 상 문제 부분을 찾아낼 수 있다.
자바, WAS, 프로파일링, BCI, 스택

Description

트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 그 방법 { A system and method tracing the java stack at the designated point of Java process transactions }
본 발명은 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 방법에 관한 것이다.
또, 본 발명은 자바 클래스로 작성된 프로그램에 의하여 수행되는 트랜잭션에 대하여, 자바 스택을 스냅샷하는 추적코드를 작성하여 특정 자바 클래스가 로딩되어 실행될 때 상기 추적코드를 상기 자바 클래스에 삽입시켜 자바 스택을 트레이스하는 시스템 및 방법에 관한 것이다.
일반적으로 WAS(Web Application Server)는 웹 어플리케이션을 수행할 수 있는 환경을 제공해주는 서버로서 대부분 자바 기반으로 구현된다. 웹 어플리케이션은 웹에서 어떤 목적을 처리하기 위해 만들어진 프로그램을 말한다. 즉, WAS는 클라이언트(또는 사용자)로부터 어떤 서비스를 처리해달라는 요청을 받으면 상기 서비스를 처리해주는 서버이다. 이때, 사용자가 요구하는 하나의 요청사항에 대하여 WAS가 처리해주는 것을 통상 트랜잭션이라고 말한다. 일반적으로 사용자가 웹에 접속하여 웹페이지에 마우스를 클릭하는 등 요청을 명령하면, 그에 대한 응답으로 열람하던 웹페이지가 갱신되거나 다른 웹페이지로 이동하는 등의 작업이 처리되는 것이 하나의 트랜잭션으로 처리되는 것이다.
웹 어플리케이션 서버(WAS)도 통상의 서버로서 다수의 클라이언트의 요청에 적절히 서비스가 되고 있는지 실시간으로 모니터링이 되고, 분석을 위해 모니터링 자료가 기록되고 축적된다. 특히, WAS는 하나의 트랜잭션 단위로 서비스를 처리하기 때문에, 트랜잭션을 중심으로 모니터링이 되고 분석된다. 평균적인 트랜잭션보다 많은 시간이 소요되거나 에러가 발생되는 트랜잭션을 찾아내면 그 트랜잭션을 분석하여 어플리케이션 서버의 문제점을 고치거나 개선하여 WAS는 더욱 안정되거나 효율적으로 수행하게 된다.
그런데, 웹 어플리케이션 서버(WAS)를 모니터링하고 분석하는 가장 효과적인 방법 중 하나는 트랜잭션을 수행하는 어플리케이션을 트레이스(trace) 하는 것이다. 즉, 많은 시간이 걸리거나 에러가 발생하는 트랜잭션이 어떻게 수행되었는지를 추적하면 보다 효과적으로 트랜잭션의 문제점을 발견할 수 있다. 문제가 있는 트랜 잭션을 추적하는 것은 프로그램을 디버깅하는 작업과 유사하다.
트랜잭션을 수행하는 프로그램(또는 코드)을 분석하여 버그나 성능저하의 근본원인을 확인하는 것은 매우 어려운 작업이다. 각각의 버그나 성능저하는 다양한 원인에 의한 것으로 추론이 가능하기 때문이다. 더군다나 어플리케이션 서버의 복잡성이 증대함에 따라, 또, 세부적인 소스 코드가 알려지지 않는 외부 실행코드(또는 클래스, 라이브러리)를 많이 사용함에 따라, 버그나 성능저하의 원인을 찾는 작업은 더욱 힘들어지고 있다.
상기 코드의 문제점을 분석하고 고치는 과정의 첫 번째 단계는 여러 시점에서 실행상태를 캡처함으로써 복잡성을 제거하고 애플리케이션 내부에서 어떤 일이 일어나고 있는지 이해하는 것이다. 두 번째 단계는, 버그의 원인이 되는 코드가 무엇인지 정확하게 확인하는 것이다. 코드의 실행상태를 캡처하고 분석하는 방법 중 효과적인 방법으로 자주 사용되는 두 가지 메커니즘은 로깅(Logging)과 코드 스택 트레이스(stack trace)다.
통상적으로, 개발자들은 어플리케이션이 실행될 때(런타임)에 실행상태를 모니터링하기 위해 실행상태를 기록(또는 로깅)하는 코드를 삽입한다. 예를 들면, 프로그램 모듈단위의 시작/종료 지점을 로그에 기록하고 나중에 로그 내용을 조회하여 어플리케이션의 상태를 확인하는 것이 가능하다. 특히, 개발 및 디버깅 단계에는 로그 레벨을 매우 상세한 수준으로 설정하나 어플리케이션이 구축되어 완료된 후에는 심각한 수준의 문제만 로그에 기록하도록 하여 시스템의 부담을 줄인다. WAS를 모니터링하고 분석하기 위해, 개발시 삽입된 로깅 코드로만 의존하지 않는 다. 대신, WAS의 실행상태를 전체적이고 규칙적으로 기록하는 프로파일러를 둔다. 프로파일러는 로깅과 유사하지만, 개발시 개발자에 의해 로깅 코드가 삽입되는 것이 아니라, 운영 중에 관리자의 필요에 따라 관심 있는 모듈들의 실행상태를 일률적이고 규칙적으로 기록한다는 차이가 있다.
로깅이나 프로파일링은 전체 중에서 문제가 발생되는 부분을 알아내는 데는 유용하나, 문제가 되는 부분의 프로그램 구조를 이해하는 데는 코드의 스택 트레이스가 보다 효과적이다. 즉, 문제가 되는 코드가 수행되는 시점에서 코드 스택을 트레이스 하는 것이다. 코드 스택이란 트레이스 하는 시점에서 상기 코드가 수행되기까지 단계적으로 호출된 프로그램 단위모듈(또는 클래스의 메소드)들을 스냅샷 한 스택을 말한다. 코드 스택은 상기 코드가 메인 모듈부터 어떤 경로를 거쳐 호출되었는가를 보여주기 때문에, 스택에 있는 모듈들을 쫓아가면서 코드를 분석하면 보다 효과적으로 문제의 원인을 파악할 수 있다. 예를 들면, 자바의 경우에는 Throwable.printStackTrace()라는 함수는 어플리케이션의 실행상태에서 스택 트레이스를 반환하는 기본 라이브러리 함수로서 제공되고 있다.
그러나 일반적으로 스택 트레이스 코드는 트레이스 하고자 하는 모듈의 특정 지점에 소스 코드로 삽입되어 이용된다. 즉, 어플리케이션이 실행되기 이전에 스택 트레이스를 원하는 프로그램 모듈단위(또는 클래스)를 선별하여 프로그램 작성단계에서 스택 트레이스 코드를 삽입해야 하는 문제점이 있다.
스택 트레이스를 할 수 있는 다른 방법은 앞서 설명한 프로파일러를 이용하는 것이다. 만약 모든 프로그램 단위모듈의 시작과 끝점의 상태를 로깅할 수 있다 면 프로파일링 되어 기록된 결과를 분석하여 스택 트레이스(stack trace)를 찾아낼 수 있다. 그러나 프로파일러를 이용한 스택 트레이스 방법은 모든 프로그램 단위모듈을 로깅해야 하는 문제점이 있다.
즉, 프로그램 단위모듈 특성상 프로파일링을 할 수 없는 모듈들이 있다. 예를 들면, 보안상 중요한 모듈이나 시스템 커널에 직접 영향을 주는 모듈들은 수정을 가할 수 없게 되어 프로파일링이 수행될 수 없다.
또, 모든 프로그램 단위모듈을 로깅하는 것은 시스템에 상당한 부하를 주기 때문에 실제 WAS의 서비스 수행이 현저하게 느려지는 문제가 발생될 수도 있다. 따라서 WAS가 실제 서비스를 수행하고 있을 때는 스택 트레이스를 수행할 수 없다.
따라서 문제가 되는 코드의 원인을 효과적으로 파악하기 위하여, WAS가 실시간으로 수행하고 있을 때에도 코드 스택을 완전하게 트레이스를 할 수 있는 방법이 요구된다.
본 발명의 목적은 상술한 바와 같은 문제점을 해결하기 위한 것으로, 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 방법을 제공하는 것이다.
또, 본 발명의 목적은 자바 클래스로 작성된 프로그램에 의하여 수행되는 트 랜잭션에 대하여, 자바 스택을 스냅샷하는 추적코드를 작성하여 특정 자바 클래스가 로딩되어 실행될 때 상기 추적코드를 상기 자바 클래스에 삽입시켜 자바 스택을 트레이스하는 시스템 및 방법을 제공하는 것이다.
상기 목적을 달성하기 위해 본 발명은 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 관한 것으로서, 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 추적코드 작성부; 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 삽입위치 지정부; 상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 코드 로딩부; 상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 프로파일링 기록부; 저장된 상기 프로파일을 보여주는 프로파일 출력부를 포함하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 추적코드는, 자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자 바 프로세스 모니터링 시스템에 있어서, 상기 프로파일링 기록부는 상기 트랜잭션의 프로파일에 상기 추적코드에 의해 출력되는 결과를 시간 순에 따라 인덱스로 구분하여 기록하고, 상기 추적코드는 자신이 프로파일에 기록하는 인덱스가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 삽입위치 지정부는, 소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 코드 로딩부는, 상기 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 삽입위치 지정부는, 상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 추적코드는, 클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서, 상기 삽입위치 지정부는, 상기 프로파일 출력부에서 출력되는 화면(window)에서 삽입위치를 선택받을 수 있는 것을 특징으로 한다.
또한, 본 발명은 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 관한 것으로서, (a) 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 단계; (b) 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 단계; (c) 상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 단계; (d) 상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 단계; (e) 저장된 상기 프로파일을 보여주는 단계를 포함하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 추적코드는, 자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자 바 프로세스 모니터링 방법에 있어서, 상기 트랜잭션의 프로파일에는 상기 추적코드에 의해 출력되는 결과가 시간 순에 따라 인덱스로 구분되어 기록되고, 상기 추적코드는 자신이 프로파일에 기록하는 인덱스가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 (b)단계에서, 소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 (c)단계는, 상기 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 (b)단계에서, 상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수 있는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 추적코드는, 클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단하는 것을 특징으로 한다.
또, 본 발명은 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서, 상기 (b)단계에서, 출력되는 상기 프로파일에서 삽입위치를 선택할 수 있는 것을 특징으로 한다.
또한, 본 발명은 상기 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
상술한 바와 같이, 본 발명에 따른 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 방법에 의하면, 성능을 저하시키거나 에러가 발생되는 지점이 어떤 경로로 호출되어 실행되는지를 파악함으로써, 보다 손쉽게 프로그램 상 문제 부분을 찾아낼 수 있는 효과가 얻어진다.
또, 본 발명에 따른 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템 및 방법에 의하면, 자바 스택을 스냅샷하는 지점을 프로파일링되는 특정 지점을 임의로 선택할 수 있게 됨으로써, 프로파일링과 스택 트레이스를 서로 연계하여 효율적으로 시스템 모니터링 및 코드 분석을 할 수 있는 효과가 얻어진다.
이하, 본 발명의 실시를 위한 구체적인 내용을 도면에 따라서 설명한다.
또한, 본 발명을 설명하는데 있어서 동일 부분은 동일 부호를 붙이고, 그 반복 설명은 생략한다.
먼저, 본 발명을 실시하기 위한 전체 시스템을 도 1을 참조하여 설명한다. 도 1은 본 발명을 실시하기 위한 전체 시스템의 구성을 예시한 도면이다.
도 1에서 보는 바와 같이, 사용자(10)는 인터넷(15) 상에서 특정한 서비스를 받기 위해서 먼저 웹서버(20)에 접속한다. 웹서버(20)는 사용자(10)의 서비스 요구에 응하여 어플리케이션을 수행할 필요가 있을 때에는 웹 어플리케이션 서버(WAS)(21)에 상기 서비스의 트랜잭션 처리를 요청한다. 자바 프로세스 모니터링 시스템(40)은 WAS(21)가 처리하는 트랜잭션을 기록하여 분석하는 시스템이다. 데이터베이스(50)는 모니터링을 할 때 필요한 데이터를 저장하기 위한 저장소이다.
웹서버(20)는 HTML 문서나 이미지 등 HTTL 프로토콜을 이용하여 콘텐츠를 사용자(10) 단말기의 웹브라우저에 제공하는 서버이다. 반면, WAS(21)는 서버 단에서 어플리케이션을 동작할 수 있는 서버로서 기능을 한다. 웹서버(20)와 WAS(21)는 하나의 시스템으로 구현될 수도 있고, 별도의 서버로서 독립되어 구현될 수도 있다. 또한, 웹 어플리케이션이 늘어나고 사용자가 늘어남에 따라 WAS(21)도 더 세분화되어 전문화되어 나누어지기도 한다.
WAS(21)는 대부분 자바로 개발된다. WAS(21)가 대부분 자바로 구현되는 이유 중 하나는 웹 특성상 특정 하드웨어에 의존적이지 않도록 개발될 필요가 있기 때문 이다. 자바는 표준화된 규격에 의하여 JVM이 설치된 곳이면 어느 곳이나 실행될 수 있어서 하드웨어 플랫폼에 의존적이지 않는 언어구조를 가지고 있다.
특히, 자바는 프로그램의 재사용성을 극대화할 수 있는 객체지향 프로그래밍(OOP, Object Oriented Programming)을 기본 개념으로 하여 구축된 언어이다. 따라서 자바에서는 OOP의 특성상 프로그램 단위모듈들이 하나의 메소드로 구현되고, 상기 메소드들은 클래스로 모아져 개체(object)로서 다루어진다. 따라서 이하에서 프로그램 단위모듈은 하나의 클래스 또는 하나의 메소드를 의미하고, 반대로 하나의 클래스 또는 메소드는 앞서 배경기술에서 설명된 프로그램 단위모듈을 말한다.
한편, 웹상에서 특정한 서비스를 처리하는 자바 어플리케이션은 통상 URL로 표기된다. 예를 들면, ""등으로 표기된다. 상기와 같이 URL 등으로 표기되는 자바 어플리케이션을 자바 서비스라고 부르기로 하고, 그 이름을 자바 서비스명이라고 하기로 한다. 자바 서비스는 상기와 같은 URL 이름을 가지는 자바 어플리케이션 외에도 이를 지원하기 위한 데몬 등의 어플리케이션들도 포함하는 포괄적인 의미로 사용될 것이다. 즉, 자바 서비스는 특정한 목적을 수행하기 위하여 자바 클래스로 구성하여 만들어진 하나의 자바 프로그램으로 볼 수 있다.
앞서 설명한 트랜잭션은 하나의 사용자 요구사항을 처리하기 위한 전체 프로세스를 의미하는 것이므로, 하나의 트랜잭션은 하나 이상의 자바 서비스를 이용하여 처리될 수도 있다. 한편, 자바에서 연속되어 처리되는 하나의 프로세스 제어를 쓰레드(Thread)라 부르기도 한다. 하나의 자바 서비스가 수행될 때 상기 자바 서비스는 다수의 쓰레드(Thread)를 생성시켜 동시에 여러 작업을 수행하여 목적하는 서 비스를 처리할 수도 있다. 그러나 이하의 설명을 간단하기 위하여 트랜잭션과 자바 서비스를 중점으로 설명한다. 물론 이하의 발명에 대한 기술이 쓰레드에도 적용이 가능할 수 있고, 본 발명은 그 적용도 포함한다. 예를 들면, 트랜잭션에 대한 프로파일링 기록을 보다 세분화하여 쓰레드(Tread) 단위로도 기록하여 적용할 수 있을 것이다.
또한, 도 1에서는 자바 기반의 웹 어플리케이션 서버(WAS)에 대한 모니터링을 예시하였으나, 웹 상의 어플리케이션이외에도 독립적인 장치(stand-alone apparatus)에서의 자바 어플리케이션을 모니터링하는 것에도 적용이 가능하다. 따라서 이하에서 자바 어플리케이션 또는 자바 프로세스에 대한 모니터링을 하는 시스템 및 장치로서 설명할 것이다.
한편, 자바 프로세스 모니터링 시스템(40)은 상기 WAS(21)의 성능을 모니터링하거나 분석하는 시스템이다. 상기 모니터링 시스템(40)은 상기 WAS(21) 프로세스에 삽입되어 모니터링 모듈로부터 정보를 수집하는 역할을 한다. 즉, 자바 클래스가 실행될 때 실행상태를 기록하는 부가기능 코드를 작성하고, 상기 클래스(또는 클래스의 메소드)가 실행되면 상기 추적코드가 실행되어 실행상태를 기록한다. 기록된 실행상태는 모니터링 또는 분석의 데이터로서 활용된다.
상기 데이터베이스(50)는 작성된 부가기능 코드, 상기 추적코드를 생성하기 위한 정보, 프로파일링된 데이터 등을 저장하기 위한 저장소이다. 상기 데이터베이스(50)는 상기 모니터링 시스템(40)의 내부에 구축할 수도 있지만, 별도의 DB서버로서 두어 관리될 수도 있다.
다음으로, 본 발명을 실시하기 위한 트랜잭션을 모니터링 하여 프로파일을 기록하는 방식을 도 2를 참조하여 설명한다. 도 2는 자바 트랜잭션을 모니터링 하여 프로파일을 기록하는 방식을 예시한 도면이다.
도 2에서 보는 바와 같이, 자바 트랜잭션은 자바 프로그램인 자바 클래스(31)에 의하여 수행된다. 상기 자바 클래스(31)에는 자바 트랜잭션을 모니터링하기 위한 추적코드(32)가 삽입되고, 삽입된 추적코드(32)는 자바 클래스(31)가 수행될 때 모니터링한 결과를 프로파일(33)에 기록한다. 프로파일(33)은 시간 순에 따라 프로파일 데이터(34)가 기록되고 상기 프로파일 데이터(34)는 인덱스(35)에 의해 구분되고 식별된다.
자바 클래스(31)는 앞서 본 바와 같이, 객체지향 방식의 프로그램이다. 따라서 자바 클래스(31)의 프로그램 단위모듈은 메소드이고, 메소드가 모여 하나의 클래스를 이룬다. 도 2의 예에서, "ClassA.m1()"은 클래스 ClassA와 상기 클래스 ClassA의 메소드인 m1 이 합쳐진 것으로서, 클래스의 메소드를 의미한다. 즉, 도 2의 예에서는 클래스가 ClassA, ClassB, ClassC의 3개가 있고, 클래스 ClassA에는 메소드 m1, 클래스 ClassB에는 m2, m3의 메소드가 있음을 알 수 있다. 클래스 ClassC에는 메소드 m3의 하나만 나타날 뿐이다. 다만, ClassC.m3()은 3번이 호출됨을 알 수 있다.
또, 도 2를 보면, ClassA.m1()은 ClassB.m2()를 호출하고, Class.m2()는 ClassC.m3()을 순차적으로 2번 호출함을 알 수 있다. 그리고 다시 ClassA.m1()은 다음으로 ClassB.m3()를 호출하고, Class.m3()은 ClassC.m3()을 재차 호출함을 알 수 있다.
추적코드(32)는 자바 클래스가 실행될 때, 자바 클래스의 상태 또는 실행상태에 대한 정보를 출력하는 코드로서, 상기 자바 클래스가 실제 시스템에 로딩(loading)되어 실행될 때 자바 클래스와 함께 로딩되어 실행되는 코드이다.
상기와 같은 추적코드를 자바 클래스에 삽입하는 기술이 BCI(Byte Code Instrumentation 또는 Byte Code Insertion) 기법이다. BCI기법은 자바의 바이트 코드에 대해 직접 수정을 가해서 소스 파일의 수정 없이 원하는 기능을 삽입하는 기법을 말한다. 전통적인 기계어는 하드웨어에 의존적인 반면, 자바는 JVM(Java Virtual Machine)에만 의존적이다. 따라서 JVM만 동일하다면 어떤 하드웨어에서든 동일한 바이트 코드는 동일하게 작동한다. 즉, 자바 소스 코드를 컴파일하거나 인터프리트를 하여 로딩할 때 부가기능 바이트 코드를 주 기능 바이트 코드에 삽입하는 것을 프로그래밍하여, 자동으로 코드 삽입이 되도록 할 수 있다. 뿐만 아니라 이미 바이트 코드화가 되어 실행되고 있는 상태(런타임 상태)에서도 부가기능 바이트 코드를 삽입할 수 있다.
상기 BCI는 자바 클래스에 추적코드(또는 추적코드)를 삽입하는 시점에 따라 크게 세가지로 분류된다. 첫 번째는 자바 클래스의 추적코드를 정적으로 삽입하는 정적 BCI(Static BCI) 방식과 두 번째는 자바 클래스가 로딩되는 시점에서 추적코 드를 삽입하는 로딩타임 BCI(Load-Time BCI) 방식이 있다. 마지막으로 JVM이 실행되고 있는 시점에 자바 클래스의 바이트 코드에 부가기능 바이트 코드를 삽입하는 런타임 BCI(Run-Time BCI) 방식이 있다.
즉, 자바에서, 자바 클래스와 부가기능 코드들은 각각 독립적으로서 작성되지만, 실제 수행될 때 두 가지 코드가 동적으로 연결되어 함께 수행될 수 있다. 예를 들면, 대표적인 것으로 로깅(logging)이나 에러처리 모듈들에 적용할 수 있을 것이다. 즉, 모든 모듈은 프로그램 디버깅을 위하여 로그 코드가 삽입되거나 에러가 발생하였을 경우 처리해야할 에러처리 코드가 삽입된다. 따라서 모든 프로그램(또는 클래스)에서 상기와 같은 코드가 삽입될 코드를 독립적인 코드로 작성할 수 있다면, 코드 변경이나 유지보수 등이 보다 편리해지고, 단순한 부가기능에서 보다 높은 수준의 부가기능을 추가할 수 있을 것이다.
한편, 추적코드(32)는 자신이 삽입될 위치를 정해야 한다. 예를 들면, 시스템 관리자로부터 추적코드(32)가 삽입될 위치를 입력받는다. 삽입위치는 클래스나 클래스의 메소드(31) 등에 의해 정해진다. 도 2의 예에서는, 추적코드(32)는 클래스 ClassA와 ClassC(31)에서만 삽입된다.
프로파일(33)은 추적코드(32)에서 출력되는 사항을 기록하는 곳이다. 즉, 프로파일(33)은 일련의 프로파일 데이터(34)로 구성된다. 하나의 프로파일 데이터(34)는 자바 클래스(31)에 삽입된 하나의 추적코드(32)에 의해 기록되는 데이터이다. 각 프로파일 데이터(34)는 일련번호가 매겨지는데, 이를 프로파일 인덱 스(35)라 한다. 프로파일(33)은 자바 클래스(31)가 실행되는 시간 순에 의하여 순차적으로 프로파일 데이터(34)가 생성되어 삽입되므로, 프로파일 인덱스(35)는 추적코드(32)가 수행됨에 따라 하나씩 증가하게 된다.
프로파일 데이터(34)는 추적코드(32)에서 출력되는 사항 이외에도 기록시점, 추적코드(32)가 삽입된 클래스 이름과 메소드 이름 등의 기본적 사항을 포함한다. 한편, 프로파일(33)은 하나의 트랜잭션에 대하여 하나의 프로파일을 설정할 수 있으나, 실시예에 따라 쓰레드(Thread)별, 서비스별로 따로 구성할 수도 있다.
다음으로, 본 발명의 일실시예에 따른 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템의 구성을 도 3 내지 도 5를 참조하여 설명한다. 도 3은 상기 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템의 구성에 대한 블록도이다. 도 4는 본 발명에 따라 클래스 메소드의 시작부 또는 종료부에 삽입하는 추적코드를 예시한 것이고, 도 5는 상기 추적코드를 예시한 것이다.
도 2에서 보는 바와 같이, 본 발명의 일실시예에 따른 자바 프로세스 모니터링 시스템(40)은 추적코드 작성부(41), 삽입위치 지정부(42), 코드 로딩부(43), 프로파일링 기록부(44), 프로파일 출력부(45)로 구성된다. 필요한 데이터를 저장하기 위한 데이터베이스(50)도 포함하여 구성할 수 있다.
추적코드 작성부(41)는 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받고, 삽입위치 지정부(42)는 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는다. 스택 트레이스 명령코드는 앞서 본 바와 같이, 자바에서 제공하는 Throwable.printStackTrace() 등의 메소드를 이용한다.
상기 추적코드(32)는, 자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있다. 또한, 상기 추적코드(32)는 자신이 프로파일(33)에 기록하는 인덱스(35)가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있다.
추적코드(32)의 기본적인 알고리즘은 도 4와 같다. 도 4에서 보는 바와 같이, 추적코드(32)에 이용되는 플래그(또는 변수)는 "stack 추적", "URL hash", "프로파일 index"로 3가지가 있다.
"stack 추적"은 스택 추적을 할지 여부에 대한 플래그로서 그 값이 참(true)일 때에만 자바 스택 스냅샷을 수행한다.
"URL hash"는 추적코드(32)가 삽입되는 클래스 또는 메소드를 호출하는 서비스명을 말한다. 다만, 서비스명이 길기 때문에 비교처리 속도를 향상하기 위하여, 서비스 명을 해시하여 해시한 값을 비교한다. 즉, 추적코드(32)는 클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단한다.
한편, "URL hash"가 0인 값을 갖는 경우는 특별한 경우로 취급한다. 즉, 특정 서비스명이나 프로파일 인덱스와 무관하게 무조건 자바 스택을 스냅샷한다.
"프로파일 index"는 앞서 설명된 프로파일 인덱스(35)를 말한다. 추적코드(32)에서 자신이 프로파일(33)에 기록하는 인덱스(35)가 지정된 인덱스와 같거나 큰 경우에만 스택을 스냅샷하도록 한다.
한편, 도 4에서는 서비스명과 프로파일 인덱스가 지정된 서비스명과 프로파일 인덱스가 모두 동일한 경우에만 자바 스택을 스냅샷하도록 구성되어 있으나, 그 어느 한쪽 조건만 만족하여도 자바 스택을 스냅샷하도록 구성하는 실시예도 가능하다.
또, 도 4에서는 조건에 만족하는 경우에는 무조건 자바 스택을 스냅샷하도록 구성하였으나, 한번이나 일정횟수의 자바 스택을 스냅샷하여 출력하면 더 이상 자바 스택을 스냅샷하지 않도록 구성할 수도 있다. 예를 들면, 도 4의 코드 중에서 [full stack 생성]의 명령코드 직후에 "stack 추적"의 변수를 거짓(false)으로 변경함으로써 가능하다.
한편, 상기와 같은 조건에 대한 지정은 삽입위치 지정부(42)에 의해 수행된다. 즉, 삽입위치 지정부(42)는 소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스(35)를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정할 수 있다.
프로파일링을 통해 자바 트랜잭션 기록을 모니터링하면 특정 클래스가 특별한 경우에만 시간이 많이 소요되거나 에러가 생기는 문제가 발생하는 경우가 있다. 이때 상기 클래스가 호출될 때마다 자바 스택을 스냅샷을 하는 것은 시스템 부하만 가중시킨다. 따라서 상기 메소드가 호출되는 특정한 상황일 때에만 스택 트레이스를 하는 것이 바람직하다. 즉, 메소드가 호출되는 프로파일 인덱스를 정하여 해당 프로파일 인덱스가 되거나 그 이후에만 자바 스택을 스냅샷하도록 설정하는 것이 바람직하다.
한편, 삽입위치 지정부(42)는 상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수도 있다. 즉, 삽입위치를 클래스 단위 또는 메소드 단위로 입력할 수 있다. 클래스 단위로 입력되면 상기 클래스에 속하는 메소드가 실행될 때마다 스택을 트레이스 한다. 반면, 메소드 단위로 입력되면 상기 메소드가 실행될 때만 스택을 트레이스 한다.
그리고 삽입위치 지정부(42)는 상기 추적코드(32)가 삽입될 수 있는 위치들을 관리자에게 제시한다. 이때, 관리자가 직관적으로 찾거나 보기 쉽게 하기 위하여, 추적코드(32)가 삽입 가능한 자바 클래스들을 화면에 제공할 수 있다. 특히, 자바의 객체 지향 특성에 따라 클래스의 트리구조로 화면에 제공할 수 있다. 관리자는 상기 클래스 트리구조에서 추적코드를 삽입할 자바 클래스 또는 메소드를 선택한다.
또한 다른 실시예로서, 삽입위치 지정부(42)는 상기 프로파일 출력부(45)에서 출력되는 화면(window)에서 삽입위치를 선택받을 수 있다. 즉, 프로파일링한 결과를 보여주는 화면에서도 삽입위치가 선택될 수 있다. 일반적으로, 트랜잭션에 대하여 프로파일링을 하여 그 결과를 모니터링 하다가 문제 부분을 발견하면, 그 문 제 부분을 보다 자세히 검토하기 위하여 스택 트레이스를 사용한다. 따라서 프로파일 출력부(45)에서 출력하는 화면에서 스택 트레이스를 할 클래스를 선정할 수 있도록 지원하는 것은 바람직하다.
코드 로딩부(43)는 자바 클래스(31)가 로딩될 때 상기 자바 클래스(31)에 상기 추적코드(32)를 삽입하여 로딩한다. 앞서 본 바와 같이, 정적으로 삽입하는 방식, 주 기능 클래스가 로딩될 때 삽입하는 방식, 주 기능 클래스가 런타임때 삽입하는 방식 등을 코드 로딩부(43)에 모두 적용하여 구현할 수 있다.
도 5에서 보는 바와 같이, 코드 로딩부(43)는 추적 대상인 자바 클래스의 메소드에 시작부분(pushProfile) 또는 종료부분(popProfile)에 모두 추적코드(32)를 삽입할 수 있다. 그러나 자바 스택을 스냅샷하는 명령코드를 포함하는 추적코드는 자바 클래스의 메소드의 시작부분에 삽입하는 것이 보다 바람직하다. 즉, 코드 로딩부(43)는 자바 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩한다. 그 이유는 자바 스택 트레이스 명령코드는 현재 실행 중인 메소드 이전의 메소드 까지의 자바 스택을 덤프하여 보여주기 때문이다. 또, 자바 스택을 트레이스하는 본래의 이유는 추적대상 메소드의 호출경로를 알고자 하는 것이기 때문에, 시작부에서 자바 스택을 트레이스 하는 것으로 충분하다.
프로파일링 기록부(44)는 자바 클래스가 수행되면서 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장한다. 앞서 본 바와 같이, 프로파일(33)은 기록되는 시간(또는 타임스탬프), 클래스 및 메소드의 이름 등이 기록된다. 또, 스택 트레이스 코드가 삽입되는 클래스 또는 메소드에서 기록되는 경우에는 상기 스택 트레이스 코드에 의해 덤프되는 자바 스택 정보가 기록된다.
또한, 앞서 설명한 바와 같이, 상기 프로파일링 기록부(44)는 상기 트랜잭션의 프로파일(33)에 상기 추적코드(32)에 의해 출력되는 결과를 시간 순에 따라 인덱스(35)로 구분하여 기록한다.
프로파일 출력부(45)는 저장된 상기 프로파일(33)을 보여준다. 특히, 프로파일 출력부(45)는 상기 프로파일 데이터(34)를 인덱스 단위로 구분하여 보여준다.
또, 프로파일 출력부(45)는 각 인덱스 단위의 프로파일 데이터(34)를 실행된 자바 클래스의 메소드 이름을 보여주는데, 각 메소드가 속하는 클래스의 계층구조를 함께 보여줄 수도 있다.
한편, 앞서 설명한 바와 같이, 프로파일 출력부(45)가 출력하는 화면에서 스택 트레이스 코드를 삽입할 위치를 선택할 수 있다. 이렇게 함으로써, 관리자 또는 개발자는 프로파일링 데이터 또는 스택 트레이스로부터 문제를 파악하고 의심되는 부분을 재차 스택 트레이스 함으로써 더 깊게 문제의 원인을 추적해갈 수 있는 인터랙티브(interactive)한 환경을 제공해줄 수 있다.
다음으로, 본 발명에 따라 특정 트랜잭션의 특정위치에서의 자바 스택을 추 적하는 일례를 도 6을 참조하여 설명한다. 도 6a는 도2의 예에 따라 호출되는 클래스의 메소드를 표시한 것이고, 도 6b는 트랜잭션을 모니터링하다가 특정 메소드에서의 자바 스택을 추적하고자 하는 일례를 흐름도로 표시한 것이다.
도 6a에서 보는 바와 같이, 자바 서비스인 "/a.jsp"가 실행되면 ClassA.m1()이 호출된다. ClassA.m1()은 ClassB.m2()를 호출하고, Class.m2()는 ClassC.m3()을 순차적으로 2번 호출한다. 그리고 다시 ClassA.m1()은 다음으로 ClassB.m3()를 호출하고, ClassB.m3()은 ClassC.m3()을 재차 호출한다. 이것은 앞서 도 2의 예와 같다. 이때, 관리자가 추적하고자 하는 메소드가 화살표로 표시된 Class.m2()가 호출한 2번째 ClassC.m3()이다.
도 6b에서 보는 바와 같이, 사용자의 요청에 의하여 트랜잭션이 발생하고 자바 서비스인 "/a.jsp"가 호출되면(S1), 자바 클래스들이 실행되고 삽입된 추적코드(32)들이 프로파일 데이터(34)들을 생성하여 프로파일(33)에 기록한다(S2). 도 6a에서 보는 바와 같이, 프로파일링을 하기위해 추적코드(32)가 삽입된 클래스는 ClassA와 ClassC이므로 이에 대한 클래스의 메소드들만 프로파일링된다. 각 추적코드(32)에 의해 생성되는 프로파일 데이터(34)는 각각 프로파일 인덱스(35)가 부여된다. 도 6b에서의 예와 같이, "001", "002", "003" 등으로 붙여진다.
관리자는 트랜잭션에 의해 기록된 프로파일(33)을 모니터링하다가 프로파일 인덱스 003을 보다 자세히 분석하고자, 기록된 프로파일(33) 내에서 자바 스택 트레이스 위치를 설정한다. 즉, 서비스명인 "/a.jsp"와 인덱스 003으로 삽입위치를 정한다(S3).
상기와 같이, 추적코드의 삽입위치를 설정하고 동일한 요청을 시작시켜 트랜잭션을 발생시킨다(S4). 그러면 서비스 "/a.jsp"는 다시 호출되고 앞서 프로파일링된 과정을 다시 수행할 것이다. 이때 추적코드는 프로파일링을 하다가 동일한 인덱스가 발생되는 지점에서 자바 스택을 스냅샷할 것이다(S5). 도 6b의 하단에서 보는 바와 같이, 스냅샷한 자바 스택은 ClassA.m1(), ClassB.m2(), ClassC.m3() 순으로 쌓여진 스택일 것이다.
다음으로, 본 발명의 일실시예에 따라 구현된 시스템의 화면을 도 7과 도 8을 참조하여 설명한다.
도 7은 자바 스택을 스냅샷할 지점에 대하여 지정된 서비스명이나 프로파일 인덱스를 정하지 않은 경우의 자바 스택 트레이스를 예시한 화면이다. 도 7a에서 보는 바와 같이, 추가코드(32)가 삽입될 수 있는 클래스를 좌측 화면에 트리형태로 보여주고, 중앙화면은 자바 스택 트레이스를 할 것인지 여부에 대한 체크를 하는 화면의 일례이다. 도 7b는 그 실행결과를 보여주는 것으로서, 해당 클래스의 메소드가 실행될 때의 자바 스택을 보여주고 있다. 역시 좌측 화면은 상기 메소드의 위치를 보여주는 클래스의 트리구조가 나타난다.
도 8은 자바 스택을 스냅샷할 지점에 대하여 지정된 서비스명이나 프로파일 인덱스를 정하여 자바 스택 트레이스를 예시한 화면이다. 도 8a와 도 8c는 상기 도 7a와 도 7b와 유사하나, 도 8b는 프로파일링 화면에서 스택 트레이스를 하고자 하는 특정 프로파일 인덱스를 선정하는 화면을 보여주고 있다. 즉, 도 8b에서 보는 바와 같이, 프로파일링된 결과화면에서 스택 트레이스의 인덱스 조건을 설정함을 알 수 있다.
다음으로, 본 발명의 일실시예에 따른 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법을 도 9를 참조하여 설명한다. 도 9는 상기 프로세스 모니터링 방법을 설명하는 흐름도이다.
본 발명의 일실시예에 따른 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법은 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법이다.
도 9에서 보는 바와 같이, 상기 자바 프로세스 모니터링 방법은 (a) 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 단계(S10); (b) 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 단계(S2); ((c) 상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 단계(S30); (d) 상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 단계(S40); (e) 저장된 상기 프로파일을 보여주는 단계(S50)를 포함하여 구성된다.
특히, 상기 추적코드는, 자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있다. 또한, 상기 추적코드는 자신이 프로파일에 기록하는 인덱스가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있다.
또, 상기 추적코드는, 클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단한다.
또, 상기 (b)단계에서, 소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정한다. 또, 상기 (b)단계에서, 상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수 있다. 상기 (b)단계에서, 출력되는 상기 프로파일에서 삽입위치를 선택할 수 있다.
상기 (c)단계는, 상기 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩한다.
상기 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 대한 설명 중 미흡한 부분은 앞서 설명된 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 대한 설명을 참고한다.
이상, 본 발명자에 의해서 이루어진 발명을 상기 실시 예에 따라 구체적으로 설명하였지만, 본 발명은 상기 실시 예에 한정되는 것은 아니고, 그 요지를 이탈하지 않는 범위에서 여러 가지로 변경 가능한 것은 물론이다.
본 발명은 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 자바 트랜잭션을 모니터링하고 분석하는 시스템에 적용이 가능하다. 특히, 자바 클래스로 작성된 자바 어플리케이션에 의하여 수행되는 트랜잭션에 대하여, 자바 스택을 스냅샷하는 추적코드를 작성하여 자바 프로그램이 로딩되어 실행될 때 상기 추적코드를 삽입시켜 자바 스택을 트레이스하는 시스템 개발에 적용이 가능하다.
도 1은 본 발명을 실시하기 위한 전체 시스템의 구성을 예시한 도면이다.
도 2는 본 발명을 실시하기 위한 트랜잭션을 모니터링 하여 프로파일을 기록하는 방식을 예시한 도면이다.
도 3은 본 발명의 일실시예에 따른 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템의 구성에 대한 블록도이다.
도 4는 본 발명의 일실시예에 따른 추적코드의 예시도이다.
도 5는 본 발명의 일실시예에 따라 클래스 메소드의 시작부 또는 종료부에 삽입하는 추적코드를 예시한 도면이다.
도 6은 본 발명에 따라 특정 트랜잭션의 특정위치에서의 자바 스택을 추적하는 예시한 도면이다.
도 7은 본 발명의 일실시예에 따라 임의의 호출에 의한 트랜잭션의 전체 자바 스택 트레이스를 예시한 화면이다.
도 8은 본 발명의 일실시예에 따라 특정 트랜잭션의 특정위치에서의 자바 스택 트레이스를 예시한 화면이다.
도 9는 본 발명의 일실시예에 따른 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법을 설명하는 흐름도이다.
* 도면의 주요 부분에 대한 부호의 설명 *
10 : 사용자 단말기 15 : 인터넷
20 : 웹서버 21 : WAS
31 : 자바 클래스 32 : 추적코드
33 : 프로파일 34 : 프로파일 데이터
35 : 프로파일 인덱스 40 : 자바 프로세스 모니터링 시스템
41 : 추적코드 작성부 42 : 삽입위치 지정부
43 : 삽입위치 로딩부 44 : 프로파일링 기록부
45 : 프로파일 출력부
50 : 데이터베이스 51 : 추적코드DB
52 : 프로파일DB

Claims (17)

  1. 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템에 있어서,
    자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 추적코드 작성부;
    상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 삽입위치 지정부;
    상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 코드 로딩부;
    상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 프로파일링 기록부;
    저장된 상기 프로파일을 보여주는 프로파일 출력부를 포함하고,
    상기 추적코드는,
    자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  2. 삭제
  3. 제 1항에 있어서,
    상기 프로파일링 기록부는 상기 트랜잭션의 프로파일에 상기 추적코드에 의해 출력되는 결과를 시간 순에 따라 인덱스로 구분하여 기록하고,
    상기 추적코드는 자신이 프로파일에 기록하는 인덱스가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  4. 제 3항에 있어서, 상기 삽입위치 지정부는,
    소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  5. 제 1항에 있어서, 상기 코드 로딩부는,
    상기 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩하는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  6. 제 1항에 있어서, 상기 삽입위치 지정부는,
    상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수 있는 것을 특징 으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  7. 제 1항에 있어서, 상기 추적코드는,
    클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단하는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  8. 제 1항에 있어서, 상기 삽입위치 지정부는,
    상기 프로파일 출력부에서 출력되는 화면(window)에서 삽입위치를 선택받을 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 시스템.
  9. 네트워크에 연결된 다수의 사용자의 처리요청에 의하여 발생되는 트랜잭션에 대하여, 상기 트랜잭션을 수행하는 자바 서비스 프로그램의 지정된 지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법에 있어서,
    (a) 자바 스택을 스냅샷하여 출력하는 스택 트레이스 명령코드를 포함하는 추적코드를 입력받는 단계;
    (b) 상기 추적코드가 삽입될 위치를 상기 프로그램의 클래스로 지정하여 입력받는 단계;
    (c) 상기 클래스가 로딩될 때 상기 클래스에 상기 추적코드를 삽입하여 로딩하는 단계;
    (d) 상기 클래스가 수행되면 상기 추적코드가 수행되어 출력되는 결과를 기록하여 상기 트랜잭션에 대한 프로파일로 저장하는 단계;
    (e) 저장된 상기 프로파일을 보여주는 단계를 포함하고,
    상기 추적코드는,
    자신이 삽입되는 클래스가 처리하는 트랜잭션이 지정된 트랜잭션인 경우에만 스택 트레이스 명령코드를 수행하도록 트랜잭션 조건을 설정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  10. 삭제
  11. 제 9항에 있어서,
    상기 트랜잭션의 프로파일에는 상기 추적코드에 의해 출력되는 결과가 시간 순에 따라 인덱스로 구분되어 기록되고,
    상기 추적코드는 자신이 프로파일에 기록하는 인덱스가 지정된 인덱스와 같거나 큰 경우에만 스택 트레이스 명령코드를 수행하도록 프로파일 인덱스 조건을 설정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  12. 제 11항에 있어서, 상기 (b)단계에서,
    소정의 트랜잭션을 지정하여 트랜잭션 조건을 설정하거나, 소정의 프로파일 인덱스를 지정하여 프로파일 인덱스 조건을 설정하거나, 또는 상기 트랜잭션 조건과 상기 프로파일 인덱스 조건을 모두 설정하는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  13. 제 9항에 있어서, 상기 (c)단계는,
    상기 클래스에 속하는 모든 메소드의 코드의 앞에 추적코드를 삽입하여 로딩하는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  14. 제 9항에 있어서, 상기 (b)단계에서,
    상기 추적코드가 삽입될 위치를 클래스의 메소드로 정할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  15. 제 9항에 있어서, 상기 추적코드는,
    클래스가 처리하는 트랜잭션과 지정된 트랜잭션이 동일한지를 비교하기 위하여, 상기 두 개의 트랜잭션의 이름을 해시(hash)한 값을 비교하여 동일여부를 판단하는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  16. 제 9항에 있어서, 상기 (b)단계에서,
    출력되는 상기 프로파일에서 삽입위치를 선택할 수 있는 것을 특징으로 하는 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법.
  17. 제9항, 제11항 내지 제16항 중 어느 한 항의 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는 자바 프로세스 모니터링 방법을 수행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020080050798A 2008-05-30 2008-05-30 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법 KR100920414B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080050798A KR100920414B1 (ko) 2008-05-30 2008-05-30 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080050798A KR100920414B1 (ko) 2008-05-30 2008-05-30 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법

Publications (1)

Publication Number Publication Date
KR100920414B1 true KR100920414B1 (ko) 2009-10-07

Family

ID=41572060

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080050798A KR100920414B1 (ko) 2008-05-30 2008-05-30 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법

Country Status (1)

Country Link
KR (1) KR100920414B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170119477A (ko) * 2016-04-19 2017-10-27 삼성에스디에스 주식회사 서비스 모니터링 시스템 및 방법
KR101828156B1 (ko) * 2016-06-23 2018-02-12 주식회사 와탭랩스 트랜잭션 모니터링 시스템 및 그 동작방법
CN111443902A (zh) * 2020-03-20 2020-07-24 杭州有赞科技有限公司 函数调用树生成方法、系统、计算机设备及可读存储介质
KR102307948B1 (ko) 2020-03-27 2021-10-05 주식회사 와탭랩스 학습 기반의 트랜잭션 관찰 시스템 및 그 제어방법
KR102499005B1 (ko) * 2022-10-05 2023-02-16 (주)제니퍼소프트 트랜잭션 응답 분포도의 패턴 인식 방법시스템 및 이를 이용한 패턴 인식 시스템방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050091470A (ko) * 2004-03-12 2005-09-15 주식회사 와이드티엔에스 텐덤 시스템의 트랜잭션 분석 시스템
KR20060118572A (ko) * 2004-01-08 2006-11-23 인터내셔널 비지네스 머신즈 코포레이션 트랜잭션 지원 방법 및 장치
KR20070038637A (ko) * 2005-10-06 2007-04-11 (주)아이피엠에스 자바 바이트 코드의 데이터 모니터링 시 모니터링된데이터의 호출관계 규명 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060118572A (ko) * 2004-01-08 2006-11-23 인터내셔널 비지네스 머신즈 코포레이션 트랜잭션 지원 방법 및 장치
KR20050091470A (ko) * 2004-03-12 2005-09-15 주식회사 와이드티엔에스 텐덤 시스템의 트랜잭션 분석 시스템
KR20070038637A (ko) * 2005-10-06 2007-04-11 (주)아이피엠에스 자바 바이트 코드의 데이터 모니터링 시 모니터링된데이터의 호출관계 규명 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
한국정보과학회 06 한국컴퓨터종합학술대회 논문집*

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170119477A (ko) * 2016-04-19 2017-10-27 삼성에스디에스 주식회사 서비스 모니터링 시스템 및 방법
KR102433764B1 (ko) 2016-04-19 2022-08-19 삼성에스디에스 주식회사 서비스 모니터링 시스템 및 방법
KR101828156B1 (ko) * 2016-06-23 2018-02-12 주식회사 와탭랩스 트랜잭션 모니터링 시스템 및 그 동작방법
CN111443902A (zh) * 2020-03-20 2020-07-24 杭州有赞科技有限公司 函数调用树生成方法、系统、计算机设备及可读存储介质
CN111443902B (zh) * 2020-03-20 2023-09-08 杭州有赞科技有限公司 函数调用树生成方法、系统、计算机设备及可读存储介质
KR102307948B1 (ko) 2020-03-27 2021-10-05 주식회사 와탭랩스 학습 기반의 트랜잭션 관찰 시스템 및 그 제어방법
KR102499005B1 (ko) * 2022-10-05 2023-02-16 (주)제니퍼소프트 트랜잭션 응답 분포도의 패턴 인식 방법시스템 및 이를 이용한 패턴 인식 시스템방법

Similar Documents

Publication Publication Date Title
US10996947B2 (en) Diagnosing production applications
US8752015B2 (en) Metadata merging in agent configuration files
EP3660684B1 (en) Efficient and comprehensive source code fuzzing
US9411616B2 (en) Classloader/instrumentation approach for invoking non-bound libraries
US7877642B2 (en) Automatic software fault diagnosis by exploiting application signatures
US8418149B2 (en) Differential comparison system and method
US7698691B2 (en) Server application state
KR101705265B1 (ko) 동적 인스트루먼테이션을 통한 커스텀 코드의 진단을 스트림라인하기위한 메소드 콜의 검출
EP2442230B1 (en) Two pass automated application instrumentation
US20150220421A1 (en) System and Method for Providing Runtime Diagnostics of Executing Applications
US20050268064A1 (en) Memory-usage tracking tool
JP2009516239A (ja) コンピュータアプリケーションの追跡及びモニタリングを行う汎用のマルチインスタンスメソッド及びgui検出システム
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
US11436133B2 (en) Comparable user interface object identifications
CN110795357A (zh) 程序监控方法及装置
US20090064088A1 (en) Method and system for displaying http session entry and exit points
KR100920414B1 (ko) 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법
Kapfhammer et al. Database-aware test coverage monitoring
Mitropoulos et al. Dismal code: Studying the evolution of security bugs
US20090064102A1 (en) Method and system for navigationally displaying http session entry and exit points
US9436575B2 (en) Selective profiling of applications
EP3995966A1 (en) System and method for automatic application log messages grouping using logging framework code instrumentation
US20060190218A1 (en) Generative instrumentation framework
Parízek BUBEN: Automated Library Abstractions Enabling Scalable Bug Detection for Large Programs with I/O and Complex Environment
Bran Detecting software performance anti-patterns from profiler data

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130715

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140710

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160719

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170719

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180801

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190725

Year of fee payment: 11