KR101968575B1 - 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치 - Google Patents

실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치 Download PDF

Info

Publication number
KR101968575B1
KR101968575B1 KR1020170069012A KR20170069012A KR101968575B1 KR 101968575 B1 KR101968575 B1 KR 101968575B1 KR 1020170069012 A KR1020170069012 A KR 1020170069012A KR 20170069012 A KR20170069012 A KR 20170069012A KR 101968575 B1 KR101968575 B1 KR 101968575B1
Authority
KR
South Korea
Prior art keywords
bottleneck
information
function
performance information
service
Prior art date
Application number
KR1020170069012A
Other languages
English (en)
Other versions
KR20180132292A (ko
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 KR1020170069012A priority Critical patent/KR101968575B1/ko
Priority to US16/616,177 priority patent/US11216352B2/en
Priority to PCT/KR2018/006272 priority patent/WO2018221998A1/ko
Publication of KR20180132292A publication Critical patent/KR20180132292A/ko
Application granted granted Critical
Publication of KR101968575B1 publication Critical patent/KR101968575B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/321Display for diagnostics, e.g. diagnostic result display, self-test user interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3447Performance evaluation by modeling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Abstract

본 발명은 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치에 관한 것이다. 실시간 병목 자동 분석 방법은 어플리케이션 서버가 병목 분석 컴포넌트(component)를 수신하는 단계와 어플리케이션 서버가 병목 분석 컴포넌트를 설치하는 단계를 포함할 수 있되, 병목 분석 컴포넌트는 모니터링 대상인 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고, 병목 분석 컴포넌트는 클라이언트 요청에 의한 어플리케이션의 서비스 함수의 실행에 따라 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성할 수 있다.

Description

실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치{Method for automatic real-time analysis for bottleneck and apparatus for using the same}
본 발명은 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치에 관한 것이다. 보다 상세하게는 대용량 성능 모니터링 정보를 효과적으로 분석하여 실시간으로 병목 현상을 자동으로 분석 방법 및 이러한 방법을 수행하는 장치에 관한 것이다.
기존에 병목 현상을 분석하기 위해 다양한 기술들이 개발되었다.
기존의 APM(application performance management) 방식은 어플리케이션 운영 서버에 대한 성능 분석을 위해 비즈니스 함수 실행 성능을 수집하고, 거래 종료 후 수집된 성능 정보를 원격 서버에 저장한다. 하지만, APM 방식은 거래 종료까지 성능 정보 보관에 따른 메모리 부담으로 적은 수(평균 2,000개)의 호출 정보만 수집 가능하다.
기존의 프로파일러(profiler) 방식은 모든 함수에 대한 실행 성능을 수집하고 로컬에 성능 정보를 저장할 수 있다. 하지만, 프로파일러 방식은 모든 함수 성능 정보 수집으로 인한 오버헤드(overhead)가 크기 때문에 실제 운영 서버에 적용이 불가능하다. 또한, 로컬 저장에 따른 통합 성능 모니터링도 불가능하다.
기존의 덤프(dump) 분석 방식은 현재 실행 중인 함수 호출 스택(stack)을 수집할 수 있다. 또한, 수작업 명령어 실행 방식이 수행될 수 있다. 하지만, 덤프 분석 방식은 현재 실행 중인 스택(stack)에 대한 스냅샷(snapshot) 이미지일 수 있다. 실제 병목 여부 판단은 추정에 의존하게 된다. 또한, 병목에 걸린 시간에 대한 측정이 불가하다.
위와 같이 기존의 성능 모니터링 기술들은 각자 가진 특징 및 제약 사항으로 인해 근본적인 성능 병목 지점에 대한 분석을 할 수 없고 실효성 있는 성능 문제 분석에 대한 한계를 가지고 있다.
따라서, 실시간(RT, real-time) 방식으로 병목 현상에 대한 실시간 자동 분석을 수행하기 위한 방법이 필요하다.
본 발명은 상술한 문제점을 모두 해결하는 것을 그 목적으로 한다.
또한, 본 발명은, 성능 문제의 즉시 대응을 위해 어플리케이션 서비스 실행 종료 후 성능 정보를 제공하는 준실시간(NRT, near real-time) 방식이 아닌, 실행 중인 서비스의 성능 정보를 바로 제공 가능한 실시간(RT, real-time) 방식으로 병목 현상에 대한 실시간 자동 분석을 다른 목적으로 한다.
또한, 본 발명은, 성능 문제에 대한 실효적인 원인 분석을 위해 대용량의 성능 프로파일 정보를 저장시 성능 오버헤드(overhead)가 적도록 수집 및 저장하는 것을 다른 목적으로 한다.
또한, 본 발명은, 병목 현상 발생시 실시간으로 정확한 병목 발생 지점을 자동으로 식별하고 병목 시간을 산출하는 것을 다른 목적으로 한다.
상기 목적을 달성하기 위한 본 발명의 대표적인 구성은 다음과 같다.
본 발명의 일 태양에 따르면, 실시간 병목 자동 분석 방법은 어플리케이션 서버가 병목 분석 컴포넌트를 수신하는 단계와 상기 어플리케이션 서버가 상기 병목 분석 어플리케이션을 설치하는 단계를 포함할 수 있되, 상기 병목 분석 컴포넌트는 모니터링 대상인 상기 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고, 상기 병목 분석 컴포넌트는 클라이언트 요청에 의한 상기 어플리케이션의 서비스 함수의 실행에 따라 상기 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성할 수 있다.
본 발명의 다른 태양에 따르면, 실시간 병목 자동 분석이 수행되는 어플리케이션 서버는 병목 분석 어플리케이션을 수신하도록 구현되는 통신부와 상기 통신부와 동작 가능하게(operatively) 연결된 프로세서를 포함하되, 상기 프로세서는 상기 병목 분석 컴포넌트를 설치하도록 구현되고, 상기 병목 분석 컴포넌트는 모니터링 대상인 상기 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고, 상기 병목 분석 컴포넌트는 클라이언트 요청에 의한 상기 어플리케이션의 서비스 함수의 실행에 따라 상기 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성할 수 있다.
본 발명에 의하면, 성능 문제의 즉시 대응을 위해 어플리케이션 서비스 실행 종료 후 성능 정보를 제공하는 준실시간(NRT, near real-time) 방식이 아닌, 실행 중인 서비스의 성능 정보를 바로 제공 가능한 실시간(RT, real-time) 방식으로 병목 현상에 대한 실시간 자동 분석이 수행될 수 있다.
또한, 대용량의 성능 프로파일 정보의 저장시 오버헤드(overhead)가 적도록 수집 및 저장하여 성능 문제에 대한 실효적인 원인 분석이 가능할 수 있다.
또한, 병목 현상 발생시 실시간으로 정확한 병목 발생 지점에 대한 자동 식별 및 병목 시간에 대한 산출이 가능할 수 있다.
따라서, 회사 내의 IT(information technology) 담당자들은 외부 전문가의 도움 없이, 운영 중인 어플리케이션 서비스 상의 성능 병목 요소에 대해 실시간으로 자동 분석한 결과를 손쉽게 얻고 활용하여 어플리케이션 서비스에 대한 효율적인 성능 관리를 자체적으로 수행할 수 있다.
도 1은 본 발명의 실시예에 따른 병목 자동 분석 시스템을 나타낸 개념도이다.
도 2는 본 발명의 실시예에 따른 함수 호출에 따른 스택 저장 구조의 변화를 나타낸 개념도이다.
도 3은 본 발명의 실시예에 따른 어플리케이션 서버의 서비스 성능 정보 생성을 위한 동작을 나타낸 순서도이다.
도 4는 본 발명의 실시예에 따른 병목 분석 서비스 제공 방법을 나타낸 개념도이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이러한 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 본 명세서에 기재되어 있는 특정 형상, 구조 및 특성은 본 발명의 정신과 범위를 벗어나지 않으면서 일 실시예로부터 다른 실시예로 변경되어 구현될 수 있다. 또한, 각각의 실시예 내의 개별 구성요소의 위치 또는 배치도 본 발명의 정신과 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 행하여 지는 것이 아니며, 본 발명의 범위는 특허청구범위의 청구항들이 청구하는 범위 및 그와 균등한 모든 범위를 포괄하는 것으로 받아들여져야 한다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 구성요소를 나타낸다.
이하에서는, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 여러 바람직한 실시예에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
본 발명은 서버에 대한 성능 모니터링 정보를 실시간 블록 단위로 원격 저장하여 병목 현상에 대해 자동으로 분석하는 방법에 관한 것이다.
본 발명의 실시예에 따른 병목 자동 분석 방법은 성능 문제에 대한 즉시 대응을 위해 어플리케이션 서비스 실행 종료 후 성능 정보를 제공하는 준실시간(NRT, near real-time) 방식이 아닌, 실행 중인 서비스의 성능 정보를 바로 제공 가능한 실시간(RT, real-time) 방식으로 병목 현상에 대한 실시간 자동 분석을 수행할 수 있다.
또한, 본 발명의 실시예에 따른 병목 자동 분석 방법은 성능 문제에 대한 실효적인 원인 분석을 위해 대용량의 성능 프로파일 정보를 저장시 성능 오버헤드(overhead)가 적도록 수집 및 저장할 수 있다.
또한, 본 발명의 실시예에 따른 병목 자동 분석 방법은 병목 현상 발생시 실시간으로 정확한 병목 발생 지점을 자동으로 식별하고 병목 시간을 산출할 수 있다.
WAS(web application server)와 같은 미들웨어(middleware) 또는 데몬 서비스와 같이 일정한 시간 동안 지속적인 서비스를 제공하는 어플리케이션 운영 서버 등에 대한 실시간 성능 분석이 필요하다. 하지만, 현재의 병목 현상 분석 기술의 경우, 실시간 분석이 불가능하다.
아래에서는 기존의 어플리케이션 운영 서버 성능 분석 방법이 개시된다.
기존의 APM(application performance management) 방식은 어플리케이션 운영 서버에 대한 성능 분석을 위해 비즈니스 함수 실행 성능을 수집하고, 거래 종료 후 수집된 성능 정보를 원격 서버에 저장한다. 하지만, APM 방식은 거래 종료까지 성능 정보 보관에 따른 메모리 부담으로 적은 수(평균 2,000개)의 호출 정보만 수집 가능하다.
기존의 프로파일러(profiler) 방식은 모든 함수에 대한 실행 성능을 수집하고 로컬에 성능 정보를 저장할 수 있다. 하지만, 프로파일러 방식은 모든 함수 성능 정보 수집으로 인한 오버헤드(overhead)가 크기 때문에 실제 운영 서버에 적용이 불가능하다. 또한, 로컬 저장에 따른 통합 성능 모니터링도 불가능하다.
기존의 덤프(dump) 분석 방식은 현재 실행 중인 함수 호출 스택(stack)을 수집할 수 있다. 또한, 수작업 명령어 실행 방식이 수행될 수 있다. 하지만, 덤프 분석 방식은 현재 실행 중인 스택(stack)에 대한 스냅샷(snapshot) 이미지일 수 있다. 실제 병목 여부 판단은 추정에 의존하게 된다. 또한, 병목에 걸린 시간에 대한 측정이 불가하다.
위와 같이 기존의 성능 모니터링 기술들은 각자 가진 특징 및 제약 사항으로 인해 근본적인 성능 병목 지점에 대한 분석을 할 수 없고 실효성 있는 병목 현상 분석에 한계를 가지고 있다.
본 발명의 실시예에 따른 병목 자동 분석 방법은 어플리케이션 함수에 대한 콜 스택(call stack) 정보를 일정 주기(예를 들어, 기본값 2초)를 기준으로 블록 단위(예를 들어, 기본값 500개)로 전송 및 저장할 수 있다. 블록 단위의 콜 스택 정보는 UDP(user datagram protocol)를 기반으로 원격 저장 서버에 전송하여 저장할 수 있다. 콜 스택 정보는 성능 분석의 종료시까지 반복적으로 전송되어 저장될 수 있다.
주기별 콜 스택 정보의 전송시 실행이 완료되지 않은 함수에 대한 현재 스택은 별도로 스택 ID(identifier) 정보만 보관할 수 있다 콜 스택 정보의 다음 전송 주기에서 해당 함수의 실행이 완료된 경우, 별도의 지연 스택 정보에 완료 시간이 기록되고 추가로 성능 정보 저장 서버로 전송될 수 있다.
주기별 콜 스택 정보의 전송시 병목 분석기는 현재 수집된 콜 스택 정보가 앰프티(empty) 상태인지 여부를 조사할 수 있다. 콜 스택 정보가 앰프티 상태인 경우, 병목 분석기는 현재 상태를 어플리케이션 함수에 대한 콜이 진행되지 않고 특정 함수(예를 들어, API(application interface) 함수)에 대한 실행이 멈춰 있는 병목 상태로 판단할 수 있다. 이러한 경우, 병목 실행 스택 정보를 획득하고 병목 횟수를 1로 카운트할 수 있다. 병목 실행 스택 정보와 병목 횟수 정보는 서비스 성능 정보의 병목 발생 스택 목록에 추가될 수 있고, 성능 정보 저장 서버 및 모니터링 클라이언트로 전송될 수 있다.
제1 전송 주기에서 전송된 제1 병목 실행 스택 정보와 제2 전송 주기에서 전송된 제2 병목 실행 스택 정보가 동일한 경우, 동일한 함수에 대해 실행이 멈추어 있는 상태로 판단하고, 병목 횟수를 1 증가시킨 값으로 병목 횟수 정보를 업데이트 시킨 후 전송할 수 있다.
반대로, 제1 전송 주기에서 전송된 제1 병목 실행 스택 정보와 제2 전송 주기에서 전송된 제2 병목 실행 스택 정보가 동일하지 않은 경우, 새로운 함수에 의한 새로운 병목 현상의 발생으로 결정할 수 있다. 이러한 경우, 제1 병목 실행 스택 정보와 제2 병목 실행 스택 정보에 대응되는 병목 횟수 정보(예를 들어, 병목 횟수 1)를 서비스 성능 정보의 병목 발생 스택 목록에 추가할 수 있다. 제2 병목 실행 스택 정보와 제2 병목 실행 스택 정보에 대응되는 병목 횟수 정보는 성능 정보 저장 서버 및 모니터링 클라이언트로 전송될 수 있다. 특정 콜 스택에 대한 병목 시간은 전송 주기 x 병목 횟수 = 병목 시간으로 결정될 수 있다.
UDP 전송 특성 때문에 콜 스택 정보의 발생 순서가 섞일 수 있다. 따라서, 성능 정보 제공 서버는 복수개의 블록 단위로 분할되어 저장된 함수의 콜 스택 정보를 정렬하여 콜 스택 정보의 발생 순서를 맞추고, 별도로 저장된 지연 스택 정보와 병합하여 모니터링 클라이언트로 제공할 수 있다.
위와 같은 접근법을 통해 대량의 콜 스택 정보가 실시간, 블록 단위 멀티 전송으로 원격 저장될 수 있고, 동시에 자동 병목 식별 기술을 통해 로우 레벨(low level)의 정확한 병목 지점과 병목 시간이 수집되어 실효성 있는 병목 현상에 대한 분석이 가능할 수 있다.
이하, 본 발명의 실시예에서는 구체적인 병목 자동 분석 방법이 개시된다. 이하 어플리케이션 서버에 포함되는 하위 모듈/하위 구성부는 하나의 처리 단위/프로세싱 단위/동작 수행 단위를 의미할 수 있다.
도 1은 본 발명의 실시예에 따른 병목 자동 분석 시스템을 나타낸 개념도이다.
도 1에서는 어플리케이션 서버 상에 발생하는 병목 현상에 대한 자동 분석을 위한 병목 자동 분석 시스템이 개시된다.
도 1을 참조하면, 병목 자동 분석 시스템은 어플리케이션 서버(100), 성능 정보 저장 서버(200) 및 모니터링 클라이언트부(300)를 포함할 수 있다.
어플리케이션 서버(100)는 성능 모니터링 대상으로서 기업 내 비즈니스 서비스를 지속적으로 제공하는 어플리케이션이 실행되는 WAS(web application server)와 같은 미들웨어(middleware) 또는 데몬 서비스 서버 등일 수 있다. 모니터링 에이전트가 어플리케이션 서버에 라이브러리 형태로 같이 실행되어 어플리케이션 모듈의 서비스 성능 정보가 획득될 수 있고, 어플리케이션 서버(100)는 서비스 성능 정보를 실시간으로 네트워크를 통해 성능 정보 저장 서버로 전송할 수 있다.
성능 정보 저장 서버(200)는 어플리케이션 서버로부터 수신한 서비스 성능 정보를 메모리 캐쉬 및 내부 저장소에 저장할 수 있다. 수집된 서비스 성능 정보는 모니터링 클라이언트(300)의 서비스 성능 정보에 대한 요청을 기반으로 모니터링 클라이언트(300)로 전송될 수 있다.
모니터링 클라이언트(300)는 서비스 성능 정보를 기반으로 성능 대쉬보드 화면에 다각적인 성능 현황을 표출할 수 있다.
이하, 본 발명의 실시예에서는 어플리케이션 서버의 서비스 성능 정보 생성을 위한 구체적인 동작이 개시된다.
모니터링 에이전트(110)는 어플리케이션 서버의 프로세스 시작과 함께 동작할 수 있다.
모니터링 에이전트(110)은 프로세스의 시작 시점에 어플리케이션 모듈(120)의 바이너리 코드가 메모리로 로딩되는 순간 어플리케이션 모듈(120) 내 함수들의 시작과 종료 부분에 성능 정보 수집기(130)를 호출하는 코드를 삽입할 수 있다.
어플리케이션 모듈(120)은 모니터링 대상이 되는 어플리케이션 서비스를 수행하기 위한 기존의 업무용 모듈일 수 있다. 어플리케이션 모듈(120)은 함수가 호출되는 시작과 종료 시점에 자신의 함수 실행 정보(이름, IN/OUT 파라메터, 예외 등)를 함수의 작업 역할 타입에 해당되는 성능 정보 수집기를 호출하여 전달할 수 있다.
성능 정보 수집기(130)는 6가지 타입으로 구분될 수 있다. 어플리케이션 모듈(120)의 작업 역할에 해당되는 타입의 성능 정보 수집기(130)가 호출될 수 있다. 성능 정보 수집기(130)는 전술한 바와 같이 어플리케이션 모듈(120)의 작업 역할에 따라 아래와 같은 6개의 타입으로 구분될 수 있다.
타입1(Type1): 서비스 성능 정보 수집기
타입2(Type2): 일반 함수 성능 정보 수집기
타입3(Type3): SQL작업 성능 정보 수집기
타입4(Type4): 외부 시스템 호출 성능 정보 수집기
타입5(Type5): 파일 입출력 성능 정보 수집기
타입6(Type6): 네트워크 입출력 성능 정보 수집기
어플리케이션 모듈(120)의 타입은 함수의 역할을 기준으로 구분될 수 있다. 어플리케이션 모듈(120)의 타입은 병목 통계시 병목 구간을 식별하기 위한 기준으로 활용될 수 있다. 모든 타입의 성능 정보 수집기(130)는 어플리케이션 모듈(120) 내의 함수가 실행될 때 시작 시점과 종료 시점에 2번의 호출을 발생시킬 수 있다. 시작 시점의 호출에서 해당 함수의 이름, 입력값, 시작 시간 등을 포함하는 함수 프로파일(150)이 생성될 수 있고, 종료 시점의 호출에서 해당 함수의 출력값, 종료 시간, 소요 시간, 에러 발생 정보 등이 함수 프로파일(150)에 추가될 수 있다.
어플리케이션 모듈(120) 내의 함수의 시작 시점의 호출에서 생성된 함수 프로파일(150)은 리턴 값으로 반환되어 해당 함수의 종료 시점의 성능 정보 수집기(130) 호출시 입력 값으로 전달될 수 있다.
이하에서는 개별 타입에 대한 설명이 개시된다.
성능 정보 수집기(타입1)(서비스 성능 정보 수집기)는 클라이언트의 서비스 요청을 처리하기 위한 클라이언트 요청 서비스와 관련된 시작 함수에서 호출될 수 있다. 시작 함수에 의한 호출에서는 서비스ID, TxID, 시작 시간, 현재 실행 함수 Type 등의 정보를 수집하여 서비스 성능 정보(140)를 생성하고 서비스 성능 정보(140)를 서비스 성능 정보 관리자(160)에 등록할 수 있다. 다음 클라이언트 요청 서비스에 대한 종료 시점의 호출에서는 해당 서비스의 종료 시간, 소요 시간, 에러 발생 정보 등이 서비스 성능 정보(140)에 추가될 수 있다. 수집된 서비스 성능 정보(140)는 서비스 성능 정보 관리자(160)에서 삭제되고, 종료될 수 있다.
서비스 성능 정보 관리자(160)에서 삭제된 서비스 성능 정보(140)는 함수 프로파일 정보(150)와 함께 서비스 성능 정보 전송자(170)에게 전달되고, 성능 정보 저장 서버(200)로 전송될 수 있다. 즉, 서비스 성능 정보(140)에 대한 종료 함수를 기반으로 서비스 성능 정보(140)와 함수 프로파일(150)이 서비스 성능 정보 전송자(170)로 전달되고 서비스 성능 정보 전송자(170)는 서비스 성능 정보(140)와 함수 프로파일(150)을 성능 정보 저장 서버(200)로 전송할 수 있다.
성능 정보 수집기(타입2)(일반 함수 성능 정보 수집기)는 CPU(central processing unit) 연산 기반의 작업에 대한 성능 정보를 수집할 수 있다. CPU 연산 기반의 작업으로 인해 병목 현상 발생시 병목 유형이 "HANG_SVC"로 정의될 수 있다.
성능 정보 수집기(타입3)(SQL(structured query language) 작업 성능 정보 수집기)는 SQL 작업에 대한 성능 정보를 수집할 수 있다. SQL 작업으로 인해 병목 현상 발생시 병목 유형이 "HANG_SQL"로 정의될 수 있다.
성능 정보 수집기(타입4)(외부 시스템 호출 성능 정보 수집기)는 외부 시스템 연계 작업에 대한 성능 정보를 수집할 수 있다. 외부 시스템 연계 작업으로 인한 병목 현상 발생시 병목 유형이 "HANG_EAI"로 정의될 수 있다.
성능 정보 수집기(타입5)(파일 입출력 성능 정보 수집기)는 파일 입출력 작업에 대한 성능 정보를 수집할 수 있다. 파일 입출력 작업으로 병목 발생시 병목 유형이 "HANG_I/O"로 정의될 수 있다.
성능 정보 수집기(타입6)(네트워크 입출력 성능 정보 수집기)는 네트워크 입출력 작업에 대한 성능 정보를 수집할 수 있다. 네트워크 입출력 작업으로 병목 발생시 병목 유형이 "HANG_N/W"으로 정의될 수 있다.
서비스 성능 정보(140)는 클라이언트 측의 서비스 요청을 처리하기 위해 발생한 트랜잭션(transaction)에 대한 실행 성능 정보를 담고 있다.
서비스 성능 정보(140)는 서비스ID, TxID, 시작 시간, 종료 시간, 소요 시간, 에러 발생 정보, 총 함수 호출 횟수, 현재 실행 함수 타입, 병목 유형, 병목 발생 총 횟수, 병목 발생 스택 목록 등에 대한 정보를 포함할 수 있다.
TxID는 범용 고유 식별자(UUID, universally unique identifier)로서 서비스에서 발생한 트랜잭션(transaction)의 고유 식별자일 수 있다.
종료 시간은 초기값이 -1이며, 종료 시점에 종료 시간이 기록될 수 있다. 종료 시간이 -1인 경우 서비스가 실행 중인 상태로 판단될 수 있다.
총 함수 호출 횟수는 현재까지 호출된 어플리케이션 모듈(120)의 개수이다.
현재 실행 함수 타입은 성능 정보 수집기(130)의 타입 중 하나를 지시할 수 있고, 병목 유형의 판단 기준이 될 수 있다.
병목 유형은 병목 분석기(180)에 의해 판별될 수 있고, 현재 실행 함수 타입에 따라 "HANG_SVC", "HANG_SQL", "HANG_EAI", "HANG_I/O", "HANG_N/W"로 분류될 수 있다.
병목 발생 총 횟수는 병목 분석기(180)에 의해 병목으로 판별된 횟수이다. 병목 분석기(180)의 실행 주기에 따라 총 병목 시간은 실행 주기x병목 발생 총 횟수로 계산될 수 있다.
병목 발생 스택 목록은 병목이 발생된 실행 스택 정보와 병목 횟수 정보를 포함할 수 있고, 병목 분석기(180)에 의해 식별되어 병목 발생 스택 목록에 저장될 수 있다.
함수 프로파일(150)은 어플리케이션 모듈(120)의 함수 호출 트리(Tree) 정보를 스택(Stack) 자료 구조에 담고 있는 역할을 수행한다. 함수 프로파일(150)에 의해 관리되는 정보는 블록 사이즈, 시작 인덱스, 시작 시간, 함수 호출 스택 목록, 지연 스택 목록 등을 포함할 수 있다.
블록 사이즈는 함수 프로파일 정보를 블록 단위로 나누어 전송할 때 한번에 전송할 수 있는 최대 개수를 의미한다. 블록 사이즈의 기본 값은 500개로 설정된다.
전술한 바와 같이 본 발명의 실시예에 따른 병목 자동 분석 방법은 어플리케이션 함수에 대한 콜 스택(call stack) 정보(또는 함수 호출 스택 정보)를 일정 주기(예를 들어, 기본값 2초)를 기준으로 블록 단위(예를 들어, 기본값 500개)로 전송 및 저장할 수 있다. 블록 단위의 콜 스택 정보는 UDP(user datagram protocol)를 기반으로 원격 저장 서버에 전송하여 저장할 수 있다. 콜 스택 정보는 성능 분석의 종료시까지 반복적으로 전송되어 저장될 수 있다.
시작 인덱스는 함수 호출 스택이 쌓일 때부터 0부터 순차적으로 부여되며, 현재 함수 프로파일(150)의 블록의 시작 인덱스로서 성능 정보 저장 서버에 전송되어 블록의 순서를 정렬하는 기준이 될 수 있다.
함수 호출 스택 목록은 push() 발생시 현재 스택 사이즈가 블록 사이즈보다 크면 flush()를 통해 비운 정보를 서버로 전송하거나, 병목 분석기(180)의 실행 주기에 따라 forcedFlush()가 수행되어 서버로 전송된다.
지연 스택 목록은 서버 전송 실행시 실행이 종료되지 않은 스택에 대한 정보를 담고 있다. 지연 스택 목록은 이후 전송 주기에서 완료된 지연 스택 정보에 완료 시간을 기록하여 성능 정보 저장 서버로 추가 전송될 수 있다.
서비스 성능 정보 관리자(160)는 현재 실행 중인 서비스에 대한 서비스 성능 정보(140)를 목록에 등록하고 그 정보를 제공하는 역할을 수행한다. 성능 정보 수집기(130)에서 등록된 서비스의 서비스 성능 정보(140)를 제공하거나, 병목 분석기에서 현재 실행 중인 서비스의 서비스 성능 정보(140)를 제공할 수 있다.
서비스 성능 정보 전송자(170)는 서비스 성능 정보(140)와 함수 프로파일 정보(150)를 바이트 스트림(byte stream)으로 변환하여 성능 정보 저장 서버(200)에게 UDP 프로토콜을 기반으로 전송하는 역할을 수행할 수 있다. 성능 정보를 원격 저장소에 저장하기 위해 고빈도로 호출되는 성능을 빠르게 처리하기 위해 TCP(transmission control protocol) 전송 방식이 아닌 UDP 전송 방식이 사용될 수 있다.
병목 분석기(180)는 반복 실행 Timer(190)에 의해 설정된 주기로 반복하여 실행되며, 실행시 서비스 성능 정보(140)와 함수 프로파일(150)을 서비스 성능 정보 전송자(170)를 통해 성능 정보 저장 서버(200)로 전송하도록 한다. 성능 정보 저장 서버(200)로의 전송시, 함수 프로파일(150)의 함수 호출 스택 목록의 사이즈가 0이면(또는 수집된 콜 스택 정보가 앰프티(empty) 상태이면), 어플리케이션 모듈(120)의 함수 호출이 진행되지 않고 특정 함수에 멈춰 있는 병목 현상으로 판단하여 현재의 실행 스택 정보(또는 병목 실행 스택 정보)를 획득하여 병목 횟수를 1로 카운트할 수 있다. 병목 실행 스택 정보와 병목 횟수 정보는 서비스 성능 정보(140)의 병목 발생 스택 목록에 추가되고, 병목 실행 스택 정보와 병목 횟수 정보는 함께 성능 정보 저장 서버(200)로 전송될 수 있다.
병목 분석기(180)는 다음 주기 전송에서 여전히 함수 호출 스택 목록의 사이즈가 0이고 병목 실행 스택 정보가 이전 주기에서 저장된 병목 실행 스택 정보와 동일하면 기존의 병목 횟수를 1을 증가시키고 업데이트 후 전송할 수 있다.
병목 분석기(180)는 다음 주기 전송에서 여전히 함수 호출 스택 목록의 사이즈가 0이고 병목 실행 스택 정보가 이전 주기에서 저장된 병목 실행 스택 정보와 동일하지 않으면, 새로운 병목 현상의 발생으로 간주하고 현재의 병목 실행 스택 정보와 병목 횟수 정보(병목 횟수 1)를 병목 발생 스택 목록에 추가하고 병목 실행 스택 정보와 병목 횟수 정보는 같이 전송할 수 있다.
이때 특정 콜 스택에서의 병목 시간은 전송 주기 x 병목 횟수로 계산될 수 있다. 예를 들어, 병목 횟수가 30회이면 병목 현상으로 인해 해당 실행 스택에서 60초 동안 멈춰 있었다는 의미일 수 있다.
이와 같이 병목이 식별되면 서비스 성능 정보(140)의 병목 유형에 현재 실행 함수 타입에 따라 HANG_SVC, HANG_SQL, HANG_EAI, HANG_I/O, HANG_N/W 중 해당 값으로 설정하여 모니터링 클라이언트(300)에서 병목 구간을 명시적으로 식별할 수 있다.
반복 실행 타이머(190)는 설정된 주기로 반복하여 병목 분석기(180)의 병목 분석을 실행시키기 위한 역할을 수행할 수 있다. 예를 들어, 반복 실행 타이머(190)에 의해 설정된 기본 값은 2초이며, 2초 주기로 병목 분석기를 실행할 수 있다.
성능 정보 저장 서버(200)에서 성능 정보를 클라이언트에 제공하고자 할 경우, UDP 전송 특성 때문에 발생 순서가 섞여서 복수개의 블록으로 나뉘어 저장된 함수 콜 스택 정보를 정렬하여 발생 순서를 맞출 수 있다. 또한, 별도로 저장된 지연 스택의 완료 시간 정보가 병합되어 제공될 수 있다.
모니터링 클라이언트(300)는 성능 정보 저장 서버(200)에게 성능 정보를 요청하여 병목이 발생한 서비스 목록들의 병목 유형을 시각화하여 표출할 수 있다. 관리자가 상세 병목 스택 목록을 요청하면 해당 서비스의 병목 발생 스택 목록을 리스트로 출력하고, 관리자가 병목 발생 스택 목록을 통해 병목이 발생한 로우 레벨(low level)의 병목 지점과 병목 시간 등을 참조할 수 있다.
도 2는 본 발명의 실시예에 따른 함수 호출에 따른 스택 저장 구조의 변화를 나타낸 개념도이다.
도 2를 참조하면, 함수 호출에 따른 함수 프로파일(150) 내의 스택 저장 구조의 변화가 개시된다.
함수A 시작, 함수B 시작, 함수C 시작, 함수C 종료, 함수B 종료, 함수D 시작, 함수E 시작, 함수E 종료, 함수D 종료, 함수A 종료 순서로 함수 호출이 수행될 수 있다.
이러한 경우, 제1 상태의 성능 프로파일 스택 저장 구조는 함수A 시작, 함수B 시작, 함수C 시작을 기반으로 인덱스(0)의 함수A, 인덱스(1)의 함수B, 인덱스(2)의 함수C를 포함할 수 있다.
제2 상태의 성능 프로파일 스택 저장 구조는 함수B종료 및 함수C 종료로 인해 인덱스(0)의 함수A만을 포함할 수 있다.
제3 상태의 성능 프로파일 스택 저장 구조는 함수D 시작, 함수E 시작으로 인해 인덱스(0)의 함수A, 인덱스(3)의 함수D, 인덱스(4)의 함수E를 포함할 수 있다.
제4 상태의 성능 프로파일 스택 저장 구조는 함수D종료 및 함수E 종료로 인해 인덱스(0)의 함수A만을 포함할 수 있다.
제6 상태의 성능 프로파일 스택 저장 구조는 함수A종료로 인해 스택 저장 구조가 비어있는 상태로 전환될 수 있다.
도 3은 본 발명의 실시예에 따른 어플리케이션 서버의 서비스 성능 정보 생성을 위한 동작을 나타낸 순서도이다.
도 3에서는 어플리케이션 서버를 통한 서비스 성능 정보의 생성 및 제공을 위한 방법이 개시된다.
도 3을 참조하면, 어플리케이션 프로세스가 시작될 수 있다(단계 S300).
어플리케이션 프로세스의 시작과 함께 어플리케이션 모듈(120)의 바이너리 코드에 대한 메모리 로딩이 수행된다(단계 S302).
어플리케이션 모듈이 모니터링 대상인지 여부가 판단되고(단계 S304), 어플리케이션 모듈(120)이 모니터링 대상 설정과 일치하면 모니터링 에이전트(110)에 의해 성능 정보 수집기(130) 호출 코드가 모듈 내 함수들의 시작과 종료 부분에 삽입된다(단계 S306).
성능 정보 수집기(130)는 6가지 타입으로 구분될 수 있고, 어플리케이션 모듈(120)에 대응되는 타입의 성능 정보 수집기(130)의 호출 코드가 삽입될 수 있다.
어플리케이션 모듈(120)에 대한 메모리 로딩 작업이 모두 완료되고(단계 S308), 어플리케이션 서버(100)는 서비스 준비를 완료할 수 있다(단계 S310).
어플리케이션 서버(100)의 클라이언트로부터 발생한 서비스 요청을 처리하기 위한 해당 어플리케이션 모듈(120)의 서비스 함수가 시작될 수 있다(단계 S312).
앞서 주입된 코드에 따라 서비스 함수의 시작 부분에서 성능 정보 수집기(130) 중 서비스 성능 정보 수집기(타입1)가 호출될 수 있다(단계 S314).
서비스 성능 정보 수집기(타입1)의 시작에서 서비스ID, TxID, 시작 시간, 현재 실행 함수 타입 등의 정보를 수집하여 서비스 성능 정보(140)가 생성될 수 있다(단계 S316).
함수 프로파일(150)이 생성될 수 있다(단계 S318).
서비스 성능 정보(140)는 함수 프로파일(150)을 생성하여 초기화될 수 있다. 서비스 생성된 서비스 성능 정보는 서비스 성능 정보 관리자(160)에 등록될 수 있다(단계 S320).
다음으로 서비스를 처리하기 위해 어플리케이션 모듈(120) 내부의 함수들의 순차적인 시작과 종료가 반복될 수 있다. 어플리케이션 모듈(120)의 내부 함수가 시작되면(단계 S322) 성능 정보 수집기(130)의 시작부가 호출될 수 있다(단계 S324).
이때 함수의 작업 역할에 따라 전술한 타입들 중 해당 타입의 성능 정보 수집기가 호출될 수 있다.
성능 정보 수집기(130)의 시작에서는 함수의 이름, 입력값, 시작 시간 등이 포함된 프로파일 정보를 생성하여 함수 프로파일(150)의 스택에 푸쉬(Push)할 수 있다(단계 S326).
어플리케이션 모듈 내부 함수가 종료되면(단계 S328), 성능 정보 수집기의 종료부가 호출된다(단계 S330).
성능 정보 수집기의 종료에서는 함수 프로파일(150)의 스택에서 Pop()을 수행하여 앞서 시작에서 생성된 함수 프로파일 정보 얻은 후, 함수의 출력값, 종료시간, 소요시간, 에러 발생 정보 등을 함수 프로파일 정보에 추가한다(단계 S332).
어플리케이션 모듈(120) 내부의 모든 함수 수행이 종료되면 어플리케이션 모듈(120)의 서비스 함수의 종료가 수행되고(단계 S334), 여기에서는 성능 정보 수집기의 서비스 성능 정보 수집기(타입1)의 종료부가 호출될 수 있다(단계 S336).
서비스 성능 정보 수집기(타입1)의 종료에서는 해당 서비스의 종료 시간, 소요 시간, 에러 발생 정보 등이 서비스 성능 정보(140)에 추가될 수 있다. 이렇게 수집이 완료된 서비스 성능 정보는 서비스 성능 정보 관리자(160)에서 삭제되고, 종료(Close)될 수 있다(단계 S338).
서비스 성능 정보(140)의 생성 종료(close)(단계 S340)와 함께 함수 프로파일(150)에 대한 종료(close)(단계 S342)도 수행되고 서비스 성능 정보(140)와 함께 함수 프로파일 정보(150)가 서비스 성능 정보 전송자(170)의 전송(send) 호출 시 전달될 수 있다(단계 S344).
서비스 성능 정보 전송자(170)의 전송(send)를 기반으로 서비스 성능 정보(140)와 함께 함수 프로파일 정보(150)가 UDP 전송 방식으로 성능 정보 저장 서버(200)로 전송될 수 있다.
한편 시작과 함께 분리된 별도의 쓰레드(thread)로 실행된 반복 실행 타이머(190)는 설정된 주기(기본값 2초)에 따라 반복하여(단계S380) 병목 분석기(180)의 시작부를 호출할 수 있다(단계S382).
병목 분석기(180)의 시작에서는 서비스 성능 정보 관리자(160)에 등록된 실행 중인 서비스의 성능 목록을 조회할 수 있다(단계S384). 이 목록을 기반으로 병목 분석기(180)의 병목 자동 분석이 수행될 수 있다(단계S386).
전술한 바와 같이 병목 분석기(180)의 병목 자동 분석에서는 함수 프로파일의 함수 호출 스택 목록(또는 콜 스택 목록)의 사이즈를 조사하여 0이면(또는 수집된 콜 스택 정보가 앰프티(empty) 상태이면), 어플리케이션 모듈 함수에 대한 호출이 진행되지 않고 특정 함수에 멈춰 있는 병목 현상으로 판단될 수 있다.
현재의 실행 스택 정보를 획득하여 병목 횟수를 1로 카운트하고 이 한 쌍의 정보를 서비스 성능 정보(140)의 병목 발생 스택 목록에 추가하여 현재까지의 실행 성능 정보와 함수 프로파일 정보를 서비스 성능 정보 전송자의 전송(send) 호출에 따라 성능 정보 저장 서버로 전달할 수 있다.
다음 주기 전송에서 여전히 함수 호출 스택 목록의 사이즈가 0이고 이때의 실행 스택 정보가 이전 주기에서 저장된 실행 스택의 정보와 동일하면 기존의 병목 횟수를 1을 증가시키고 업데이트 후 전송할 수 있다. 실행 스택 정보가 일치하지 않으면, 새로운 병목 발생으로 간주하고 현재의 실행 스택과 병목 횟수 1을 병목 발생 스택 목록에 추가하고 같이 전송할 수 있다. 이때 특정 콜 스택의 병목 시간은 전송 주기 x 병목 횟수로 계산될 수 있다.
이와 같이 병목이 식별되면 서비스 성능 정보(140)의 병목유형에 현재 실행 함수 Type에 따라 HANG_SVC, HANG_SQL, HANG_EAI, HANG_I/O, HANG_N/W 중 해당하는 타입으로 설정하여 모니터링 클라이언트(300)에서 병목 구간을 명시적으로 식별할 수 있도록 할 수 있다.
성능 정보 저장 서버(200)의 저장부(store)에서는 서비스 성능 정보 전송자(170)로부터 수신한 성능 정보를 저장하고(단계S346), 모니터링 클라이언트(300)의 병목 정보 시각화시(단계S348), UDP 전송 특성 때문에 발생 순서가 섞여서 복수개의 블록으로 나뉘어 저장된 함수 콜 스택 정보를 정렬하여 발생 순서를 맞추고, 별도로 저장된 지연 스택의 완료 시간 정보를 병합하여 성능 정보를 제공할 수 있다.
전술한 바와 같이 본 발명의 실시예에 따른 병목 자동 분석 방법은 어플리케이션 함수에 대한 콜 스택(call stack) 정보를 일정 주기(예를 들어, 기본값 2초)를 기준으로 블록 단위(예를 들어, 기본값 500개)로 전송 및 저장할 수 있다. 블록 단위의 콜 스택 정보는 UDP(user datagram protocol)를 기반으로 원격 저장 서버에 전송하여 저장할 수 있다. 콜 스택 정보는 성능 분석의 종료시까지 반복적으로 전송되어 저장될 수 있다.
도 4는 본 발명의 실시예에 따른 병목 분석 서비스 제공 방법을 나타낸 개념도이다.
도 4에서는 도 1 내지 도 3에서 전술한 병목 분석 서비스를 제공하기 위한 병목 분석 제어 장치의 동작이 개시된다.
도 4를 참조하면, 병목 분석 제어 장치(400)는 모니터링 클라이언트(300) 측으로 네트워크 상의 병목 현상에 대한 분석 서비스를 제공할 수 있다.
병목 자동 분석을 위한 서비스를 위해 병목 분석 제어 장치(400)는 어플리케이션 서버(100)로 병목 분석 어플리케이션(또는 병목 모니터링 어플리케이션, 병목 분석 컴포넌트(component), 병목 분석 모듈)(100-1)을 전송하고, 성능 정보 저장 서버(200) 및 모니터링 클라이언트(300)를 설정할 수 있다.
병목 분석 제어 장치(400)는 프로세서와 통신부를 포함할 수 있고, 프로세서는 병목 분석 제어 장치(400)의 구동을 위한 제어를 위해 구현되고, 통신부는 어플리케이션 서버(100), 성능 정보 저장 서버(200), 모니터링 클라이언트(300) 등과의 통신을 위해 프로세서와 동작 가능하게(operatively) 연결될 수 있다.
병목 분석 제어 장치는 병목 분석 컴포넌트(100-1)를 제공하기 위해 구현될 수 있다. 마찬가지로 실시간 병목 자동 분석이 수행되는 어플리케이션 서버는 병목 분석 컴포넌트를 수신하도록 구현되는 통신부와 통신부와 동작 가능하게(operatively) 연결된 프로세서를 포함할 수 있다. 프로세서는 병목 분석 컴포넌트(100-1)를 설치하도록 구현되고, 병목 분석 컴포넌트(100-1)는 모니터링 대상인 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고, 병목 분석 컴포넌트(100-1)는 클라이언트 요청에 의한 상기 어플리케이션의 서비스 함수의 실행에 따라 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성할 수 있다.
병목 분석 컴포넌트(100-1)는 전술한 도 1 내지 도 3에서 개시한 어플리케이션 서버(100)/성능 정보 저장 서버(200)/모니터링 클라이언트(300) 상에서 수행되는 병목 현상의 분석을 위한 동작들을 구동시키기 위해 구현될수 있다.
예를 들어, 병목 분석 컴포넌트(100-1)는 모니터링 대상인 어플리케이션 모듈(또는 어플리케이션(100-2))에 성능 정보 수집기에 대한 호출 코드를 추가하고, 클라이언트 요청에 의한 어플리케이션 모듈의 서비스 함수의 실행에 따라 성능 정보 수집기를 호출하여 서비스 성능 정보를 생성할 수 있다.
또한, 병목 분석 컴포넌트(100-1)는 함수 프로파일 정보를 생성하고, 서비스 함수의 종료에 따라 성능 정보 수집기에 의해 수집된 서비스 성능 정보 및 함수 파일 정보를 성능 정보 저장 서버로 전송할 수 있다.
전술한 바와 같이 서비스 성능 정보는 병목 관련 정보를 포함하고, 병목 분석기는 설정 주기별로 설정된 개수의 블록 단위로 전송되어 저장되는 콜 스택 정보(또는 함수 호출 스택 정보)를 기반으로 병목 관련 정보를 생성할 수 있다. 병목 관련 정보는 병목 유형, 병목 발생 총 횟수, 병목 발생 스택 목록 등을 포함할 수 있다.
병목 분석기는 함수 프로파일 정보에 포함되는 콜 스택 목록 사이즈가 0인 경우, 병목 현상으로 판단하고, 병목 관련 정보는 병목 현상을 발생시킨 병목 실행 스택 정보와 병목 횟수 정보를 포함할 수 있다.
병목 관련 정보는 현재 실행 함수 타입 정보를 포함하고, 현재 실행 함수 타입 정보는 모니터링 클라이언트의 병목 구간 식별을 위해 서비스 함수의 종류에 대한 정보를 포함할 수 있다.
이상 설명된 본 발명에 따른 실시예는 다양한 컴퓨터 구성요소를 통하여 실행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수 있다. 컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM 및 DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical medium), 및 ROM, RAM, 플래시 메모리 등과 같은, 프로그램 명령어를 저장하고 실행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의하여 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용하여 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위하여 하나 이상의 소프트웨어 모듈로 변경될 수 있으며, 그 역도 마찬가지이다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항과 한정된 실시예 및 도면에 의하여 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위하여 제공된 것일 뿐, 본 발명이 상기 실시예에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정과 변경을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 또는 이로부터 등가적으로 변경된 모든 범위는 본 발명의 사상의 범주에 속한다고 할 것이다.

Claims (11)

  1. 실시간 병목 자동 분석 방법은,
    어플리케이션 서버가 병목 분석 컴포넌트(component)를 수신하는 단계; 및
    상기 어플리케이션 서버가 상기 병목 분석 컴포넌트를 설치하는 단계를 포함하되,
    상기 병목 분석 컴포넌트는 모니터링 대상인 상기 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고,
    상기 병목 분석 컴포넌트는 클라이언트 요청에 의한 상기 어플리케이션의 서비스 함수의 실행에 따라 상기 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성하고,
    상기 병목 분석 컴포넌트는 상기 어플리케이션의 함수 프로파일 정보를 생성하고,
    상기 병목 분석 컴포넌트는 상기 서비스 함수의 종료에 따라 상기 성능 정보 수집기에 의해 수집된 서비스 성능 정보 및 상기 함수 프로파일 정보를 성능 정보 저장 서버로 전송하고,
    상기 서비스 성능 정보는 병목 관련 정보를 포함하고,
    상기 함수 프로파일 정보는 함수 호출 스택 정보를 포함하고,
    병목 분석기는 설정 주기 별로 설정 개수의 블록 단위로 전송되어 저장되는 상기 함수 호출 스택 정보를 기반으로 상기 병목 관련 정보를 생성하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 병목 분석기는 상기 함수 호출 스택 목록 사이즈가 0인 경우, 병목 현상으로 판단하고,
    상기 병목 관련 정보는 상기 병목 현상을 발생시킨 병목 실행 스택 정보와 병목 실행 스택으로 인한 병목 횟수 정보를 포함하는 것을 특징으로 하는 방법.
  5. 제4항에 있어서,
    상기 병목 관련 정보는 병목 유형 정보를 포함하고,
    상기 병목 유형 정보는 모니터링 클라이언트의 병목 구간 식별을 위한 상기 서비스 함수의 타입에 대한 정보를 포함하는 것을 특징으로 하는 방법.
  6. 실시간 병목 자동 분석이 수행되는 어플리케이션 서버는,
    병목 분석 컴포넌트를 수신하도록 구현되는 통신부; 및
    상기 통신부와 동작 가능하게(operatively) 연결된 프로세서를 포함하되,
    상기 프로세서는 상기 병목 분석 컴포넌트를 설치하도록 구현되고,
    상기 병목 분석 컴포넌트는 모니터링 대상인 상기 어플리케이션 서버에 설치된 어플리케이션에 성능 정보 수집기에 대한 호출 코드를 추가하고,
    상기 병목 분석 컴포넌트는 클라이언트 요청에 의한 상기 어플리케이션의 서비스 함수의 실행에 따라 상기 성능 정보 수집기를 호출하여 병목 현상 분석을 위한 서비스 성능 정보를 생성하고,
    상기 병목 분석 컴포넌트는 상기 어플리케이션의 함수 프로파일 정보를 생성하고,
    상기 병목 분석 컴포넌트는 상기 서비스 함수의 종료에 따라 상기 성능 정보 수집기에 의해 수집된 서비스 성능 정보 및 상기 함수 프로파일 정보를 성능 정보 저장 서버로 전송하고,
    상기 서비스 성능 정보는 병목 관련 정보를 포함하고,
    상기 함수 프로파일 정보는 함수 호출 스택 정보를 포함하고,
    병목 분석기는 설정 주기 별로 설정 개수의 블록 단위로 전송되어 저장되는 상기 함수 호출 스택 정보를 기반으로 상기 병목 관련 정보를 생성하는 것을 특징으로 하는 어플리케이션 서버.
  7. 삭제
  8. 삭제
  9. 제6항에 있어서,
    상기 병목 분석기는 상기 함수 호출 스택 목록 사이즈가 0인 경우, 병목 현상으로 판단하고,
    상기 병목 관련 정보는 상기 병목 현상을 발생시킨 병목 실행 스택 정보와 병목 실행 스택으로 인한 병목 횟수 정보를 포함하는 것을 특징으로 하는 어플리케이션 서버.
  10. 제9항에 있어서,
    상기 병목 관련 정보는 병목 유형 정보를 포함하고,
    상기 병목 유형 정보는 모니터링 클라이언트의 병목 구간 식별을 위한 상기 서비스 함수의 타입에 대한 정보를 포함하는 것을 특징으로 하는 어플리케이션 서버.
  11. 제1항, 제4항 및 제5항 중 어느 한 항에 따른 방법을 실행하기 위한 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체.
KR1020170069012A 2017-06-02 2017-06-02 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치 KR101968575B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170069012A KR101968575B1 (ko) 2017-06-02 2017-06-02 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치
US16/616,177 US11216352B2 (en) 2017-06-02 2018-06-01 Method for automatically analyzing bottleneck in real time and an apparatus for performing the method
PCT/KR2018/006272 WO2018221998A1 (ko) 2017-06-02 2018-06-01 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170069012A KR101968575B1 (ko) 2017-06-02 2017-06-02 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치

Publications (2)

Publication Number Publication Date
KR20180132292A KR20180132292A (ko) 2018-12-12
KR101968575B1 true KR101968575B1 (ko) 2019-08-13

Family

ID=64456016

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170069012A KR101968575B1 (ko) 2017-06-02 2017-06-02 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치

Country Status (3)

Country Link
US (1) US11216352B2 (ko)
KR (1) KR101968575B1 (ko)
WO (1) WO2018221998A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112131086A (zh) * 2020-09-18 2020-12-25 浪潮电子信息产业股份有限公司 一种应用服务器的性能调优方法、装置及设备
CN113608750B (zh) * 2021-08-04 2023-01-24 北京元年科技股份有限公司 监控组件的部署方法、装置、计算机设备以及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100906440B1 (ko) * 2008-05-07 2009-07-09 주식회사 엑셈 웹 어플리케이션 서버 트랜잭션과 데이터 베이스 관리시스템 세션의 연계를 통한 웹 어플리케이션 성능 모니터링장치 및 그 방법
US20120089724A1 (en) 2010-10-08 2012-04-12 Vmware, Inc. Diagnosis of application server performance problems via thread level pattern analysis
US20140282597A1 (en) 2013-03-15 2014-09-18 Concurix Corporation Bottleneck Detector for Executing Applications
US20150227446A1 (en) 2012-09-25 2015-08-13 Nec Corporation Bottleneck detection device, method and recording medium storing program
US20160034301A1 (en) 2014-07-29 2016-02-04 International Business Machines Corporation Identifying Performance Bottleneck of Transaction in Transaction Processing System

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225291B2 (en) * 2008-01-04 2012-07-17 International Business Machines Corporation Automated detection of application performance bottlenecks
US9032375B2 (en) * 2011-04-27 2015-05-12 International Business Machines Corporation Performance bottleneck identification tool
US8875108B2 (en) * 2012-01-12 2014-10-28 International Business Machines Corporation Run-time bottleneck detection
WO2016174764A1 (ja) * 2015-04-30 2016-11-03 株式会社日立製作所 管理装置および管理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100906440B1 (ko) * 2008-05-07 2009-07-09 주식회사 엑셈 웹 어플리케이션 서버 트랜잭션과 데이터 베이스 관리시스템 세션의 연계를 통한 웹 어플리케이션 성능 모니터링장치 및 그 방법
US20120089724A1 (en) 2010-10-08 2012-04-12 Vmware, Inc. Diagnosis of application server performance problems via thread level pattern analysis
US20150227446A1 (en) 2012-09-25 2015-08-13 Nec Corporation Bottleneck detection device, method and recording medium storing program
US20140282597A1 (en) 2013-03-15 2014-09-18 Concurix Corporation Bottleneck Detector for Executing Applications
US20160034301A1 (en) 2014-07-29 2016-02-04 International Business Machines Corporation Identifying Performance Bottleneck of Transaction in Transaction Processing System

Also Published As

Publication number Publication date
WO2018221998A1 (ko) 2018-12-06
US11216352B2 (en) 2022-01-04
KR20180132292A (ko) 2018-12-12
US20200210307A1 (en) 2020-07-02

Similar Documents

Publication Publication Date Title
US9015315B2 (en) Identification and monitoring of distributed business transactions
US9077610B2 (en) Performing call stack sampling
US9451017B2 (en) Method and system for combining trace data describing multiple individual transaction executions with transaction processing infrastructure monitoring data
US10904112B2 (en) Automatic capture of detailed analysis information based on remote server analysis
US7725777B2 (en) Identification of root cause for a transaction response time problem in a distributed environment
US8190599B2 (en) Stream data processing method and system
CN104731690B (zh) 适应性度量收集、存储、和警告阈值
CN103403699B (zh) 估算流数据库应用中的负荷削减数据的系统和方法
US9602340B2 (en) Performance monitoring
US20100223446A1 (en) Contextual tracing
US20060117059A1 (en) System and method for monitoring and managing performance and availability data from multiple data providers using a plurality of executable decision trees to consolidate, correlate, and diagnose said data
US9311598B1 (en) Automatic capture of detailed analysis information for web application outliers with very low overhead
WO2019051948A1 (zh) 监控数据的处理方法、设备、服务器及存储介质
US20070189509A1 (en) Data path identification and analysis for distributed applications
US20170126580A1 (en) Tracking Contention in a Distributed Business Transaction
US20140201762A1 (en) Event handling system and method
KR101968575B1 (ko) 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치
US20090240476A1 (en) Method and device for forecasting computational needs of an application
CN112416708A (zh) 异步调用链路监控方法及系统
US20170034019A1 (en) Application centric network experience monitoring
US20210266238A1 (en) Operation device and operation method
KR100747467B1 (ko) 로그 관리 객체를 이용한 장치관리 시스템 및 해당시스템에서의 로깅 데이터 생성 및 제어 방법
JP2004164610A (ja) 管理装置
CN113986937A (zh) 一种客户端数据更新的方法、系统和介质
CN114546817A (zh) 一种信息处理方法、装置、存储介质及计算机程序产品

Legal Events

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