KR102141456B1 - 자동 프로파일링이 가능한 모니터링 시스템 - Google Patents

자동 프로파일링이 가능한 모니터링 시스템 Download PDF

Info

Publication number
KR102141456B1
KR102141456B1 KR1020190003313A KR20190003313A KR102141456B1 KR 102141456 B1 KR102141456 B1 KR 102141456B1 KR 1020190003313 A KR1020190003313 A KR 1020190003313A KR 20190003313 A KR20190003313 A KR 20190003313A KR 102141456 B1 KR102141456 B1 KR 102141456B1
Authority
KR
South Korea
Prior art keywords
php
function
program
zend
time
Prior art date
Application number
KR1020190003313A
Other languages
English (en)
Other versions
KR20200087372A (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 KR1020190003313A priority Critical patent/KR102141456B1/ko
Publication of KR20200087372A publication Critical patent/KR20200087372A/ko
Application granted granted Critical
Publication of KR102141456B1 publication Critical patent/KR102141456B1/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/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • 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

Landscapes

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

Abstract

자동 프로파일링이 가능한 모니터링 시스템이 제공된다. PHP 엔진은 PHP(Hypertext Preprocessor) 프로그램을 실행하고, PHP 데이터 수집 모듈은 PHP 프로그램이 실행되는 동안 PHP 프로그램의 성능을 모니터링하는 APM(Application Performance Monitoring) 프로그램을 실행하여, PHP 프로그램의 PHP 함수가 시작되면, PHP 함수의 수행 시간이 사전에 설정된 임계값보다 긴 경우 PHP 함수를 자동 프로파일할 수 있다.

Description

자동 프로파일링이 가능한 모니터링 시스템{Apparatus of capable auto profiling}
본 발명은 자동 프로파일링이 가능한 모니터링 시스템에 관한 것으로서, 보다 상세하게는, PHP 프로그램이 실행되는 동안 응답 시간이 오래 소요되는 함수 또는 메소드를 자동으로 프로파일할 수 있는 자동 프로파일링이 가능한 모니터링 시스템에 관한 것이다.
APM(Application Performance Monitoring) 프로그램은 애플리케이션(Application)의 성능과 이용성을 감시(Monitoring)하는데 사용된다. SPM(System Performance Monitoring) 프로그램은 하드웨어의 성능(주로 CPU, Memory 등)을 모니터링하는 반면, 이와 달리 APM 프로그램은 애플리케이션 프로그램 코드 내의 문제점을 파악하고, 파악한 문제점을 APM 사용자에게 전달하는 것이 주요한 특징이다.
애플리케이션 프로그램 코드내의 문제점을 파악하기 위해서, APM 프로그램은 특정 함수 또는 메소드를 프로파일(Profile)할 수 있어야 한다. 프로파일이란 함수 또는 메소드의 응답시간과 입력 변수(Parameter), 반환 값(Return Value)를 수집하는 것을 의미한다.
APM의 프로파일은 정적 프로파일과 동적 프로파일로 구분지을 수 있다.
정적 프로파일은 프로파일 대상 함수를 미리, 즉, 프로그램이 빌드되기 전에 설정하여 프로파일하는 방식으로, 애플리케이션 실행 도중 추가되거나 삭제될 수 없다. 정적 프로파일 대상 함수 목록은 APM 개발사의 노하우를 통해 프로그램 빌드 시간에 결정되며, 사용자가 추가, 삭제할 수 없다.
그러나, 애플리케이션의 성능에 영향을 미치는 함수와 메소드가 정적 프로파일 대상 함수 목록에 존재하지 않을 수 있다. 이때 APM 사용자는 정적 프로파일 만으로는 어떤 함수가 성능에 영향을 미치는지 알 수 없다.
이러한 경우, APM 사용자는 프로파일 대상 함수를 애플리케이션 실행 중에 추가하거나 삭제할 수 있어야 하며, 이러한 기능을 동적 프로파일이라 한다.
그러나, 정적 프로파일과 동적 프로파일을 이용하는 경우 함수 성능을 수집할 수 있으나 다음과 같은 문제가 발생한다.
첫째, 애플리케이션 성능에 영향을 미치는 함수를 사전에 예측해야 하므로 예측하지 못한 성능 문제를 발견하기 어렵다. 둘째, APM 프로그램의 주요 사용자는 시스템 운영자인데, 운영자는 애플리케이션 소스코드에 대해 잘 알지 못하므로 애플리케이션 성능에 영향을 미치는 함수가 무엇인지 알기 어렵다. 셋째, 사용자가 비교적 함수를 잘 지정했다 하더라도 특정 상황에서만 함수가 느릴 경우, 필요 없는 데이터를 수집하여 분석이 어려울 수 있다.
국내 공개특허 10-2010-0003597호(2010.01.11. 공개)
전술한 문제점을 해결하기 위하여 본 발명이 이루고자 하는 기술적 과제는, PHP 프로그램이 실행되는 동안 APM 기능과 PHP 엔진이 제공하는 Zend Extension API를 이용하여 PHP 프로그램 성능에 영향을 미치는 PHP 함수를 자동으로 프로파일할 수 있는 자동 프로파일링이 가능한 모니터링 시스템을 제시하는 데 있다.
본 발명의 해결과제는 이상에서 언급된 것들에 한정되지 않으며, 언급되지 아니한 다른 해결과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
전술한 기술적 과제를 해결하기 위한 수단으로서, 본 발명의 실시 예에 따르면, 자동 프로파일링이 가능한 모니터링 시스템은, PHP(Hypertext Preprocessor) 프로그램이 실행되는 PHP 엔진; 및 상기 PHP 프로그램이 실행되는 동안 상기 PHP 프로그램의 성능을 모니터링하는 APM(Application Performance Monitoring) 프로그램을 실행하여, 상기 PHP 프로그램의 PHP 함수가 시작되면, 상기 PHP 함수의 수행 시간이 사전에 설정된 임계값보다 긴 경우 상기 PHP 함수를 자동 프로파일하는 PHP 데이터 수집 모듈;을 포함한다.
상기 PHP 데이터 수집 모듈은, 상기 PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수의 후킹 함수(hook_function)를 이용하여 상기 PHP 함수의 수행 시간을 산출하고, 상기 산출된 수행 시간이 상기 임계값보다 긴 경우, 상기 PHP 함수를 후킹하여 자동 프로파일한다.
상기 PHP 데이터 수집 모듈은, 상기 PHP 함수가 시작되면 상기 후킹 함수를 불러와 상기 PHP 함수의 수행 시간을 산출하고, 상기 후킹 함수는 상기 PHP 함수의 자동 프로파일을 위해, 상기 설정된 임계값을 읽어오기 위한 함수, 상기 PHP 함수의 실행 시작 시간을 획득하기 위한 함수 및 상기 PHP 함수의 실행 완료 시간을 획득하기 위한 함수를 이용한다.
상기 임계값은, 상기 PHP 엔진과 상기 PHP 데이터 수집 모듈이 공유하는 공유 메모리에 저장 및 변경가능하다.
한편, 전술한 기술적 과제를 해결하기 위한 수단으로서, 본 발명의 실시 예에 따르면, 자동 프로파일링이 가능한 전자 장치는, PHP(Hypertext Preprocessor) 프로그램과 상기 PHP 프로그램이 실행되는 동안 PHP 성능을 모니터링하는 APM(Application Performance Monitoring) 프로그램이 저장되는 메모리; 및 상기 메모리에 저장된 PHP 프로그램과 APM 프로그램을 실행하여, 상기 PHP 프로그램이 실행되는 동안 상기 APM 프로그램이 PHP 성능을 모니터링하여 수행 시간이 설정된 임계값보다 긴 PHP 함수를 자동 프로파일하도록 처리하는 프로세서;를 포함한다.
상기 프로세서는, 상기 APM 프로그램이, 상기 PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수의 후킹 함수(hook_function)를 이용하여 PHP 함수의 수행 시간을 산출하고, 상기 산출된 수행 시간이 상기 임계값보다 긴 경우, 상기 PHP 함수를 후킹하여 자동 프로파일하도록 처리한다.
상기 실행 중인 APM 프로그램은 상기 PHP 함수가 실행될 때 상기 후킹 함수를 불러와 상기 PHP 함수의 수행 시간을 산출하고, 상기 후킹 함수는 상기 자동 프로파일을 위해, 상기 설정된 임계값을 읽어오기 위한 함수, 상기 PHP 함수의 실행 시작 시간을 획득하기 위한 함수 및 상기 PHP 함수의 실행 완료 시간을 획득하기 위한 함수를 이용한다.
사용자에 의해 조정된 임계값을 입력받는 사용자 인터페이스부; 및 상기 PHP프로그램과 상기 APM 프로그램이 공유하며, 상기 사용자 인터페이스부를 통해 조정되는 임계값을 저장하는 공유 메모리;를 더 포함하고, 상기 프로세서는, 상기 APM 프로그램이 상기 공유 메모리에 저장된 임계값을 읽어와 상기 수행 시간과 비교하도록 실시간으로 처리한다.
본 발명에 따르면, PHP 프로그램이 실행되는 동안 APM 기능과 PHP 엔진이 제공하는 Zend Extension API를 이용하여 PHP 프로그램 성능에 영향을 미치는 PHP 함수를 실행 시간에 근거하여 자동으로 프로파일함으로써, PHP 성능에 영향을 미치는 PHP 함수를 실시간으로 프로파일하고, 보다 간단히 PHP 성능을 개선시킬 수 있다.
또한, 본 발명에 따르면, PHP 성능에 영향을 미치는 PHP 함수를 사용자가 사전에 인지하지 못 하여도 자동 프로파일링이 가능하다.
또한, 본 발명에 따르면, APM 프로그램이 실행되는 동안 PHP 함수를 후킹하는 프로세스와 후킹된 PHP 함수들을 서버로 전송하거나 관리하는 등의 프로세서를 독립적으로 구현함으로써 자동 프로파일 성능을 향상시킬 수 있다.
본 발명의 효과는 이상에서 언급된 것들에 한정되지 않으며, 언급되지 아니한 다른 효과들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 전자 장치를 도시한 블록도,
도 2는 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 모니터링 시스템을 도시한 도면, 그리고,
도 3은 본 발명의 실시 예에 따른 전자 장치의 자동 프로파일링 방법을 설명하기 위한 흐름도이다.
이상의 본 발명의 목적들, 다른 목적들, 특징들 및 이점들은 첨부된 도면과 관련된 이하의 바람직한 실시 예들을 통해서 쉽게 이해될 것이다. 그러나 본 발명은 여기서 설명되는 실시 예들에 한정되지 않고 다른 형태로 구체화될 수도 있다. 오히려, 여기서 소개되는 실시 예들은 개시된 내용이 철저하고 완전해질 수 있도록 그리고 당업자에게 본 발명의 사상이 충분히 전달될 수 있도록 하기 위해 제공되는 것이다.
본 명세서에서 제1 엘리먼트 (또는 구성요소)가 제2 엘리먼트(또는 구성요소) 상(ON)에서 동작 또는 실행된다고 언급될 때, 제1 엘리먼트(또는 구성요소) 제2 엘리먼트(또는 구성요소)가 동작 또는 실행되는 환경에서 동작 또는 실행되거나 또는 제2 엘리먼트(또는 구성요소)와 직접 또는 간접적으로 상호 작용을 통해서 동작 또는 실행되는 것으로 이해되어야 할 것이다.
어떤 엘리먼트, 구성요소, 장치, 또는 시스템이 프로그램 또는 소프트웨어로 이루어진 구성요소를 포함한다고 언급되는 경우, 명시적인 언급이 없더라도, 그 엘리먼트, 구성요소, 장치, 또는 시스템은 그 프로그램 또는 소프트웨어가 실행 또는 동작하는데 필요한 하드웨어(예를 들면, 메모리, CPU 등)나 다른 프로그램 또는 소프트웨어(예를 들면 운영체제나 하드웨어를 구동하는데 필요한 드라이버 등)를 포함하는 것으로 이해되어야 할 것이다.
또한, 어떤 엘리먼트(또는 구성요소)가 구현됨에 있어서 특별한 언급이 없다면, 그 엘리먼트(또는 구성요소)는 소프트웨어, 하드웨어, 또는 소프트웨어 및 하드웨어 어떤 형태로도 구현될 수 있는 것으로 이해되어야 할 것이다.
또한, 본 명세서에서 사용된 용어는 실시 예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다.
본 발명의 실시를 위한 구체적인 내용을 설명하기에 앞서, 본 명세서 및 청구범위에 사용된 용어나 단어는 발명자가 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사항에 부합하는 의미와 개념으로 해석되어야 할 것이다.
또한, 본 발명에 관련된 공지 기능 및 그 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는, 그 구체적인 설명을 생략하였음에 유의해야 할 것이다.
이하, 본 발명에서 실시하고자 하는 구체적인 기술내용에 대해 첨부도면을 참조하여 상세하게 설명하기로 한다.
도 1 및 도 2에 도시된 전자 장치(100)의 각각의 구성은 기능 및/또는 논리적으로 분리될 수도 있음을 나타내는 것이며, 반드시 각각의 구성이 별도의 물리적 장치로 구분되거나 별도의 코드로 작성됨을 의미하는 것은 아님을 본 발명의 기술분야의 평균적 전문가는 용이하게 추론할 수 있을 것이다.
상기 자동 프로파일링을 위한 전자 장치(100)의 실행을 위한 프로그램은 소정의 데이터 프로세싱 장치에 설치되어 본 발명의 기술적 사상을 구현할 수 있다.
또한, 본 발명의 실시 예에 따른 자동 프로파일링을 위한 전자 장치(100)는 마이크로 프로세서, 메모리, FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuit) 등 프로그램의 설치 및 실행이 가능한 장치(예를 들어, 데스크탑 PC(Personal Computer), 서버, 랩탑 PC(Laptop PC), 넷북 컴퓨터(Netbook Computer) 등)를 사용하여 구현될 수 있다.
도 1은 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 전자 장치(100)를 도시한 블록도, 도 2는 PHP 프로세스와 PHP 데이터 수집 모듈의 동작을 설명하기 위한 개념도이다.
먼저, 본 발명의 실시 예에 따르면, APM(Application Performance Monitoring) 사용자가 자동 프로파일 기능 사용 시, PHP(Hypertext Preprocessor) 함수의 수행 시간이 특정 설정 시간보다 긴 함수를 실시간으로 바로 알 수 있도록 할 수 있다.
예를 들어, "수행 시간이 1000ms보다 긴 함수를 프로파일 하라"라고 APM 프로그램에 설정하면, APM 프로그램은 1000ms보다 수행 시간이 긴 PHP 함수를 프로파일하여 APM 사용자에게 보여줄 수 있다. 다수의 PHP 함수들 중 수행 시간이 특정 설정 시간보다 긴 PHP 함수를 자동 프로파일 대상 함수라 하며, 자동 프로파일 대상 함수 설정의 주체는 APM 프로그램이다.
본 명세서에서, 자동 프로파일 대상 함수는 PHP 함수, PHP 모니터링 데이터, PHP 성능에 영향을 주는 PHP 모니터링 데이터와 혼용될 수 있다.
도 1을 참조하면, 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 전자 장치(100)는 버스(110), 사용자 인터페이스부(120), 공유 메모리(130), 메모리(140), 프로세서(150) 및 통신 인터페이스부(160)를 포함할 수 있으며, 이하에서는 '전자 장치(100)'라 한다.
버스(110)는 예를 들면, 각 구성 요소들(120~160)을 서로 연결하고, 제어 메시지 및/또는 데이터와 같은 각종 신호를 전달하는 회로를 포함할 수 있다.
사용자 인터페이스부(120)는 사용자로부터 자동 프로파일 대상 함수를 선별하기 위한 기준, 즉, 특정 설정 시간을 임계값으로서 입력받을 수 있다. 전자 장치(100)가 컴퓨터인 경우, 사용자 인터페이스부(120)는 키보드 또는 마우스와 같은 입력장치와, 임계값을 입력받기 위한 입력창 또는 자동 프로파일된 PHP 함수들을 보여주는 모니터를 포함할 수 있다.
공유 메모리(130)와 메모리(140)는 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있다. 공유 메모리(130)에는 사용자가 설정한 자동 프로파일할 함수를 선별하기 위한 기준, 즉, 특정 설정 시간이 임계값으로서 저장될 수 있으며, APM 프로그램은 공유 메모리(130)에 저장된 임계값을 실시간으로 확인하여 최종적으로 변경저장된 임계값과 수행 시간을 비교한 후, 자동 프로파일 여부를 판단할 수 있다.
또한, PHP 프로그램의 실행에 의해 생성되는 일련의 PHP 프로세스는 작업을 수행하는 동안 발생하는 데이터를 공유 메모리(130)에 저장할 수 있다. 또한, APM 프로그램의 실행이 자동 프로파일한 PHP 함수들 또는 메소드는 공유 메모리(130)에 저장될 수 있다. 따라서, 공유 메모리(130)는 PHP 프로세스(또는 PHP 엔진, 210)와 APM 프로그램이 공유하는 메모리이다.
본 발명의 실시 예에서는 공유 메모리(130)와 메모리(140)를 구별하여 자동 프로파일링하는 동작을 설명하고 있으나, 이는 일 예로서, 메모리(140) 하나로 본 발명을 구현할 수도 있다.
메모리(140)에는 예를 들어, 전자 장치(100)가 제공하는 동작, 기능 등을 구현 및/또는 제공하기 위하여, 구성요소들(110~160)에 관계된 명령 또는 데이터, 하나 이상의 프로그램 및/또는 소프트웨어, 운영체제 등이 저장될 수 있다.
메모리(140)에 저장되는 프로그램은 PHP 프로그램과, APM 프로그램을 포함할 수 있다. PHP 프로그램은 PHP로 동작하는 애플리케이션이다. APM 프로그램은 PHP 프로그램이 실행되는 동안 PHP로 동작하는 프로그램, 즉, PHP 프로그램의 성능을 모니터링하는 프로그램으로서, PHP 프로그램이 실행되는 동안 자동으로 PHP 함수(즉, 자동 프로파일 대상 함수 또는 PHP 성능에 영향을 주는 PHP 모니터링 데이터)의 수행 시간을 산출하고, 산출 결과에 따라 PHP 함수의 후킹 여부를 결정하도록 하는 다수의 명령어들을 포함할 수 있다.
프로세서(150)는 전자 장치(100)에 저장된 하나 이상의 프로그램을 실행하여 전자 장치(100)의 전반적인 동작을 제어한다.
예를 들어, 프로세서(150)는 메모리(140)에 저장된 PHP 프로그램과 APM 프로그램을 실행하여, PHP 프로그램이 실행되는 동안 APM 프로그램이 PHP 성능을 모니터링하여 수행 시간이 설정된 임계값보다 긴 PHP 함수를 후킹하도록 처리할 수 있으며, 이러한 일련의 동작을 이하에서는 '자동 프로파일'이라 한다.
프로세서(150)는 실행 중인 APM 프로그램이, PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수의 후킹 함수(hook_function)를 이용하여 PHP 함수의 수행 시간을 산출하고, 산출된 수행 시간이 설정된 임계값보다 긴 경우, PHP 함수를 후킹하여 자동 프로파일하도록 처리할 수 있다.
이때, 프로세서(150)는, 실행 중인 APM 프로그램이 PHP 함수가 실행될 때 후킹 함수를 불러와 PHP 함수의 수행 시간을 산출하도록 처리할 수 있다.
후킹 함수는 APM 프로그램의 자동 프로파일을 위해, 설정된 임계값을 읽어오기 위한 함수, PHP 함수의 실행 시작 시간을 획득하기 위한 함수 및 PHP 함수의 실행 완료 시간을 획득하기 위한 함수를 이용할 수 있다.
사용자 인터페이스부(120)를 통해 사용자가 임계값을 입력 또는 조정하면, 프로세서(150)는 입력 또는 조정된 임계값을 공유 메모리(130)에 저장할 수 있다. 또한, 프로세서(150)는 APM 프로그램이 공유 메모리(130)에 저장된 임계값을 읽어와 산출된 수행 시간과 비교하도록 실시간으로 처리할 수 있다.
통신 인터페이스부(160)는 프로세서(150) 또는 독립 프로세스(230)의 요청에 의해 공유 메모리(130)에 저장된 PHP 함수들을 외부 관리 서버(미도시)로 전송할 수 있는 통신 회로를 포함한다.
도 2는 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 모니터링 시스템을 도시한 도면이다.
도 2를 참조하면, 본 발명의 실시 예에 따른 자동 프로파일링이 가능한 모니터링 시스템은 PHP 엔진(210), PHP 데이터 수집 모듈(220) 및 독립 프로세스(230)를 포함할 수 있다. PHP 엔진(210), PHP 데이터 수집 모듈(220) 및 독립 프로세스(230)는 자동 프로파일을 위해 모니터링하는 프로세서(150)의 동작을 기능적으로 구분한 구성요소일 수도 있다.
PHP 엔진(210)은 PHP 프로그램이 실행되는 엔진으로서, PHP 프로그램의 실행에 의한 프로세스를 담당할 수 있다.
프로세서(150)에서 실행되는 APM 프로그램, 즉, APM 에이전트는 PHP 엔진(210) 내에 탑재되는 PHP 데이터 수집 모듈(220)과 독립 프로세스(230)로 구분되어 독립적으로 동작할 수 있다.
PHP 프로그램이 시작하면 APM 프로그램이 시작할 수 있다. PHP 데이터 수집 모듈(220)은 APM 프로그램의 실행에 의해 생성되는 자동 프로파일링을 위한 모듈로서, PHP 프로그램이 실행되는 동안 PHP 프로그램의 성능을 모니터링하고, PHP 프로그램의 PHP 함수가 시작되면, PHP 함수의 수행 시간이 사전에 설정된 임계값보다 긴 경우 PHP 함수를 후킹하여 자동 프로파일할 수 있다. PHP 데이터 수집 모듈(220)은 PHP 프로그램과 APM 프로그램이 순차적으로 실행되면서, PHP 함수를 후킹(또는 수집)하기 위해 PHP 엔진(210) 내에 탑재될 수 있다.
독립 프로세스(230)는 APM 프로그램의 실행에 의해 생성되는 프로세스로서, PHP 데이터 수집 모듈(220)과 독립적으로 동작하며, PHP 데이터 수집 모듈(220)이 수집한 PHP 함수를 외부 서버로 전송하고, 설정을 관리하는 일을 담당한다. 설정을 관리하는 일은 임계값 설정을 포함할 수 있다.
이하에서는 프로세서(150) 또는 PHP 데이터 수집 모듈(220)이 APM 프로그램을 실행하여 PHP 함수를 자동 프로파일하는 동작을 자세히 설명하며, 경우에 따라서는 설명의 편의를 위해 동작의 주체인 전자 장치(100), 프로세서(150), 모니터링 시스템 또는 PHP 데이터 수집 모듈(220)이 생략될 수도 있다.
zend_exectue 함수 후킹
PHP 엔진(210)은 개발자에게 Zend Extension API(Application Programming Interface)를 제공한다. 그 중 컴파일된 PHP 스크립트를 실행할 때 사용되는 API 함수가 zend_execute 함수이며, zend_execute 함수의 signature는 다음과 같다.
-----------------------------------------------------------------------
ZEND_API extern void(*zend_execute)( zend_op_array *op_array TSRMLS_DC );
-----------------------------------------------------------------------
'op_array'는 PHP 함수(또는 PHP 함수들의 대표명사)를 의미할 수 있다.
PHP 데이터 수집 모듈(220)은 PHP 프로그램이 제공한 API 함수인 zend_execute 함수를 이용해 다음과 같이 PHP 함수를 후킹할 수 있다.
zend_execute 함수를 이용한 PHP 데이터 수집 모듈(220)의 후킹 방법은 다음과 같다.
----------------------------------------------------------------------
using hook_function_t=void (*)( zend_op_array *op_array TSRMLS_DC ); hook_function_t zend_execute_original;
void hook_zend_execute( hook_function_t hook_function TSRMLS_DC ){
zend_execute_original = zend_execute;
zend_execute = hook_function;
}
-----------------------------------------------------------------------
위에 정의된 zend_execute 후킹 함수는 APM이 정의하는 함수이며, 위 함수를 실행할 때 본 발명에 따른 자동 프로파일링, 즉, 후킹이 동작하게 된다.
자동 프로파일 기능 개발 상세
자동 프로파일을 위한 후킹 함수는 다음과 같이 구성 가능하다. 위에서 정의한 hook_zend_execute를 실행하면 PHP 함수가 실행될 때 APM 프로그램의 후킹 함수(hook_function)가 호출된다.
----------------------------------------------------------------------
void hook_function( zend_op_array *op_array TSRMLS_DC )
{
auto start_time = get_current_time();
zend_execute_original(op_array TSRMLS_CC ); auto
elapsed_time = get_current_time() - start_time;
if (elapsed_time >= get_threshold_time()){
collect_function_info(op_array)
}
}
-----------------------------------------------------------------------
후킹 함수(hook_function)가 위와 같을 때, 자동 프로파일을 위해 다음의 함수들을 더 필요로 한다.
1. get_threshold_time(): 자동 프로파일 임계값 읽기
사용자는 자동 프로파일 동작을 위한 임계값(즉, 특정 설정 시간)을 설정할 수 있다. 사용자는 PHP 프로그램의 성능을 향상시키기 위해 임계값을 변경할 수 있으며, 변경되는 임계값은 APM 프로그램을 실행하는 프로세서(150)에 의해 공유 메모리(130)에 저장될 수 있다. 공유 메모리(130)에 임계값을 저장하고 원할 때마다 변경함으로써, 사용자는 PHP 프로그램을 재시작하지 않고도 자동 프로파일을 위한 임계값을 변경할 수 있으며, PHP 데이터 수집 모듈(220)은 파일이 아닌 공유 메모리(130)에 존재하는 임계값을 다음과 같이 get_threshold_time() 함수를 이용하여 읽으므로 모니터링을 위한 시스템 성능 성능에 큰 영향을 주지 않을 수 있다.
----------------------------------------------------------------------
inline int64_t get_threshold_time(){
return shared_memory.threshold_time;
}
-----------------------------------------------------------------------
2. get_current_time(): 현재 시간값 읽기
현재 시간값을 millisecond 단위로 읽어오기 위해, APM 프로그램은 c++17 표준 함수를 사용하여 다음과 같이 함수를 구성할 수 있다.
----------------------------------------------------------------------
int64_t get_current_time(){
auto now = std::chrono::system_clock::now();
auto duration = now.time_since_epoch();
return std::chrono::duration_cast<std::chrono::milliseconds > (duration).count();
}
-----------------------------------------------------------------------
3. collect_function_info(zend_op_array* op_array):
PHP 데이터 수집 모듈(220)은 수행 시간(elapsed time)이 임계값(threshold_time)보다 긴 PHP 함수를 후킹하여 공유 메모리(130)에 저장할 수 있다.
한편, 상술한 함수들 중 get_current_time()과 get_threshold_time() 함수는 zend_execute 함수가 실행될 때마다 수행되므로 수행속도가 빨라야 하며, 성능에 영향을 미쳐서는 안된다. 이를 위해, APM 프로그램은 독립 프로세스(230)와 공유 메모리(130)를 활용할 수 있다. 즉, 상술한 것처럼 APM 프로그램이 프로세서(150)에 의해 실행 시, PHP 성능을 모니터링하여 PHP 함수를 자동 프로파일하고, 자동 프로파일된 PHP 함수를 공유 메모리(130)에 저장하도록 하는 프로세스(즉, PHP 데이터 수집 모듈(220))와, 공유 메모리(130)에 저장된 PHP 함수들을 서버(미도시)로 전송하는 프로세스(즉, 독립 프로세스(230))가 독립적으로 구현되도록 하고, 서로 공유 메모리(130)를 사용하도록 함으로써 성능을 향상시킬 수 있다. 이 때, 공유 메모리(130)는 PHP 엔진(210)과 PHP 데이터 수집 모듈(220), 또는 PHP 데이터 수집 모듈(220)과 독립 프로세스(230)가 공유하는 메모리일 수 있다.
도 3은 본 발명의 실시 예에 따른 전자 장치(100)의 자동 프로파일링 방법을 설명하기 위한 흐름도이다.
도 3에 도시된 자동 프로파일링 방법은 도 1 및 도 2를 참조하여 설명한 전자 장치(100) 또는 자동 프로파일링이 가능한 모니터링 시스템에 의해 동작하므로 구체적인 설명은 생략하며, 도 3에서는 전자 장치(100)에 의해 동작하는 경우를 예로 들어 설명한다.
도 3을 참조하면, 전자 장치(100)는 PHP 프로그램의 PHP 함수가 시작되면 (S300), APM 프로그램의 hook_zend_execute 함수의 후킹 함수(hook_function)를 호출하여 PHP 함수의 동작이 시작되는 현재 시간을 확인할 수 있다(S310).
전자 장치(100)는 zend_execute_original 함수를 실행하고, S310단계에서 시작된 PHP 함수 실행이 완료되면, 완료된 현재 시간을 확인할 수 있다(S320). zend_execute_original 함수는 OP_ARRAY 함수(즉, PHP 함수)를 실행하도록 명령하고 PHP 함수의 실행이 완료되면 완료되는 시간을 통지하도록 하는 의미를 포함할 수 있다.
전자 장치(100)는 S310단계에서 확인된 시간(start_time)과 S320단계에서 확인된 시간(get_current_time)의 차이를 산출하여 PHP 함수의 수행 시간(elapsed_time)을 구한다(S330).
전자 장치(100)는 S330단계에서 확인된 PHP 함수의 수행 시간과 공유 메모리(130)에 저장된 임계값을 비교하여, PHP 함수의 수행 시간이 임계값 이상이면(S340-Yes), S310단계에서 실행된 PHP 함수를 후킹하여 공유 메모리(130)에 저장할 수 있다(S350). 이로써, 전자 장치(100)는 PHP 성능 저하에 영향을 미치는 PHP 함수를 자동 프로파일할 수 있다.
반면, S340단계에서 PHP 함수의 수행 시간이 임계값 미만이면(S340-No), 전자 장치(100)는 PHP 함수를 종료한다(S360).
상술한 S300단계 내지 S360단계의 자동 프로파일링 방법은 APM 프로그램이, PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수(이하, '후킹 함수(hook_function)'라 한다)를 이용하여 PHP 함수의 수행 시간을 산출하고, 산출된 수행 시간이 임계값보다 긴 경우, PHP 함수를 후킹하여 자동 프로파일하도록 처리함으로써 수행될 수 있다.
한편, 본 발명에 따른 전자 장치(100)의 자동 프로파일링 방법은 이를 구현하기 위한 명령어들의 프로그램이 유형적으로 구현됨으로써, 컴퓨터를 통해 판독될 수 있는 기록매체에 포함되어 제공될 수도 있음은 통상의 기술자가 쉽게 이해할 수 있다.
즉, 본 발명에 따른 전자 장치(100)의 자동 프로파일링 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 형태로 구현되어, 컴퓨터 판독 가능한 기록매체에 기록될 수 있으며, 상기 컴퓨터 판독 가능한 기록매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록매체에는 하드 디스크와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media) 및 롬(ROM), 램(RAM), 플래시 메모리, USB 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다.
따라서, 본 발명은 전자 장치(100)의 자동 프로파일링 방법을 구현하기 위하여 상기 전자 장치(100)에서 수행되는 컴퓨터 판독 가능한 기록매체에 저장된 프로그램을 함께 제공할 수 있다.
한편, 이상으로 본 발명의 기술적 사상을 예시하기 위한 바람직한 실시 예와 관련하여 설명하고 도시하였지만, 본 발명은 이와 같이 도시되고 설명된 그대로의 구성 및 작용에만 국한되는 것이 아니며, 기술적 사상의 범주를 일탈함이 없이 본 발명에 대해 다수의 변경 및 수정 가능함을 당업자들은 잘 이해할 수 있을 것이다. 따라서, 그러한 모든 적절한 변경 및 수정과 균등물들도 본 발명의 범위에 속하는 것으로 간주하여야 할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.
100: 전자 장치 110: 버스
120: 사용자 인터페이스부 130: 공유 메모리
140: 메모리 150: 프로세서
160: 통신 인터페이스부

Claims (8)

  1. PHP(Hypertext Preprocessor) 프로그램이 실행되는 PHP 엔진;
    상기 PHP 프로그램이 실행되는 동안 상기 PHP 프로그램의 성능을 모니터링하는 APM(Application Performance Monitoring) 프로그램을 실행하여, 상기 PHP 프로그램의 PHP 함수가 시작되면, 상기 PHP 함수의 수행 시간이 사전에 설정된 임계값보다 긴 경우 상기 PHP 함수를 상기 PHP 프로그램의 성능에 영향을 미치는 함수로 판단하여 자동 프로파일하는 PHP 데이터 수집 모듈;
    상기 APM 프로그램의 실행에 의해 생성되며, 상기 PHP 데이터 수집 모듈이 수집한 PHP 함수를 외부 서버로 전송하고, 상기 임계값 설정을 관리하는 독립 프로세스; 및
    상기 PHP 엔진과 상기 PHP 데이터 수집 모듈이 공유하고, 상기 PHP 데이터 수집 모듈과 상기 독립 프로세스가 공유하는 공유 메모리;를 포함하고,
    상기 PHP 데이터 수집 모듈은,
    상기 PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수의 후킹 함수(hook_function)를 이용하여 상기 PHP 함수의 수행 시간을 산출하고, 상기 산출된 수행 시간이 상기 임계값보다 긴 경우, 상기 PHP 함수를 후킹하여 자동 프로파일하고,
    상기 PHP 데이터 수집 모듈이 상기 PHP 프로그램의 성능을 모니터링하여 자동 프로파일된 PHP 함수를 상기 공유 메모리에 저장하면, 상기 독립 프로세스가 상기 공유 메모리에 저장된 자동 프로파일된 PHP 함수들을 외부 서버로 전송하며,
    상기 zend excute 함수의 signature는 하기 스크립트 1의 형식으로 정의되고,
    [스크립트 1]
    ZEND_API extern void(*zend_execute)( zend_op_array *op_array TSRMLS_DC );
    상기 PHP 데이터 수집 모듈이 상기 zend excute 함수를 이용하여 PHP 함수를 후킹하는 동작은 하기 스크립트 2의 형식으로 정의되고,
    [스크립트 2]
    using hook_function_t=void (*)( zend_op_array *op_array TSRMLS_DC ); hook_function_t zend_execute_original;
    void hook_zend_execute( hook_function_t hook_function TSRMLS_DC ){
    zend_execute_original = zend_execute;
    zend_execute = hook_function;
    }
    상기 hook_zend_execute를 실행하면 PHP 함수가 실행될 때 상기 APM 프로그램의 후킹 함수가 호출되어 자동 프로파일하는 동작은 하기 스크립트 3의 형식으로 정의되며,
    [스크립트 3]
    void hook_function( zend_op_array *op_array TSRMLS_DC )
    {
    auto start_time = get_current_time();
    zend_execute_original(op_array TSRMLS_CC ); auto
    elapsed_time = get_current_time() - start_time;
    if (elapsed_time >= get_threshold_time()){
    collect_function_info(op_array)
    }
    }
    인 것을 특징으로 하는 자동 프로파일링이 가능한 모니터링 시스템.
  2. 삭제
  3. 제1항에 있어서,
    상기 PHP 데이터 수집 모듈은,
    상기 PHP 함수가 시작되면 상기 후킹 함수를 불러와 상기 PHP 함수의 수행 시간을 산출하고,
    상기 후킹 함수는 상기 PHP 함수의 자동 프로파일을 위해, 상기 설정된 임계값을 읽어오기 위한 함수, 상기 PHP 함수의 실행 시작 시간을 획득하기 위한 함수 및 상기 PHP 함수의 실행 완료 시간을 획득하기 위한 함수를 이용하는 것을 특징으로 하는 자동 프로파일링이 가능한 모니터링 시스템.
  4. 제1항에 있어서,
    상기 임계값은,
    상기 PHP 엔진과 상기 PHP 데이터 수집 모듈이 공유하는 공유 메모리에 저장 및 변경가능한 것을 특징으로 하는 자동 프로파일링이 가능한 모니터링 시스템.
  5. 사용자에 의해 조정된 임계값을 입력받는 사용자 인터페이스부;
    PHP(Hypertext Preprocessor) 프로그램과 상기 PHP 프로그램이 실행되는 동안 PHP 성능을 모니터링하는 APM(Application Performance Monitoring) 프로그램이 저장되는 메모리;
    상기 사용자 인터페이스부를 통해 조정되는 임계값을 저장하고, 상기 PHP프로그램과 상기 APM 프로그램이 공유하며, 상기 APM 프로그램의 실행에 의해 생성되는 독립 프로세스와 상기 APM 프로그램이 공유하는 공유 메모리; 및
    상기 메모리에 저장된 PHP 프로그램과 APM 프로그램을 실행하여, 상기 PHP 프로그램이 실행되는 동안 상기 APM 프로그램이 PHP 성능을 모니터링하여 수행 시간이 설정된 임계값보다 긴 PHP 함수를 자동 프로파일하도록 처리하고, 상기 APM 프로그램이 상기 공유 메모리에 저장된 임계값을 읽어와 상기 수행 시간과 비교하도록 실시간으로 처리하는 프로세서;를 포함하고,
    상기 프로세서는,
    상기 APM 프로그램이, 상기 PHP 프로그램이 제공하는 Zend Extension API(Application Programming Interface) 중 zend excute 함수(이하, '후킹 함수(hook_function)'라 한다)를 이용하여 PHP 함수의 수행 시간을 산출하고, 상기 산출된 수행 시간이 상기 임계값보다 긴 경우, 상기 PHP 함수를 후킹하여 자동 프로파일하고, 자동 프로파일된 PHP 함수를 상기 공유 메모리에 저장하도록 처리하고, 상기 독립 프로세스가 상기 공유 메모리에 저장된 상기 자동 프로파일된 PHP 함수를 외부 서버로 전송하도록 처리하는 것을 특징으로 하는 자동 프로파일링이 가능한 전자 장치.
  6. 삭제
  7. 제5항에 있어서,
    상기 실행 중인 APM 프로그램은 상기 PHP 함수가 실행될 때 상기 후킹 함수를 불러와 상기 PHP 함수의 수행 시간을 산출하고,
    상기 후킹 함수는 상기 자동 프로파일을 위해, 상기 설정된 임계값을 읽어오기 위한 함수, 상기 PHP 함수의 실행 시작 시간을 획득하기 위한 함수 및 상기 PHP 함수의 실행 종료 시간을 획득하기 위한 함수를 이용하는 것을 특징으로 하는 자동 프로파일링이 가능한 전자 장치.
  8. 삭제
KR1020190003313A 2019-01-10 2019-01-10 자동 프로파일링이 가능한 모니터링 시스템 KR102141456B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190003313A KR102141456B1 (ko) 2019-01-10 2019-01-10 자동 프로파일링이 가능한 모니터링 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190003313A KR102141456B1 (ko) 2019-01-10 2019-01-10 자동 프로파일링이 가능한 모니터링 시스템

Publications (2)

Publication Number Publication Date
KR20200087372A KR20200087372A (ko) 2020-07-21
KR102141456B1 true KR102141456B1 (ko) 2020-08-06

Family

ID=71832607

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190003313A KR102141456B1 (ko) 2019-01-10 2019-01-10 자동 프로파일링이 가능한 모니터링 시스템

Country Status (1)

Country Link
KR (1) KR102141456B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102446492B1 (ko) * 2021-08-17 2022-09-23 주식회사 리코렌인프라 수요기업 활동정보에 대한 빅데이터 분석 및 인공지능 기술을 활용한 검색/매칭/추천 알고리즘의 SI(System Integrator) 솔루션 구축 시스템

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101637201B1 (ko) * 2016-01-06 2016-07-07 (주) 다봄소프트 함수 후킹을 이용한 리눅스 또는 유닉스 시스템용 c언어 기반 어플리케이션 성능 관리 모듈

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100483283B1 (ko) * 2000-11-24 2005-04-15 엘지전자 주식회사 웹 기반의 지디엠오 정보 검색 시스템 및 방법
KR100681696B1 (ko) * 2004-11-29 2007-02-15 주식회사 안철수연구소 컴퓨터 응용 프로그램의 메모리 데이터 조작 방지 방법
KR20100003597A (ko) 2008-07-01 2010-01-11 포스데이타 주식회사 통합 성능 모니터링 방법 및 모니터링 시스템

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101637201B1 (ko) * 2016-01-06 2016-07-07 (주) 다봄소프트 함수 후킹을 이용한 리눅스 또는 유닉스 시스템용 c언어 기반 어플리케이션 성능 관리 모듈

Also Published As

Publication number Publication date
KR20200087372A (ko) 2020-07-21

Similar Documents

Publication Publication Date Title
CN109271331B (zh) 日志的生成方法、装置、计算机设备及存储介质
US7793161B2 (en) Method and apparatus to anticipate memory exhaustion in an open services gateway initiative environment
US20130047039A1 (en) System and method for computer analysis
US7577769B2 (en) Un-installation of inactive or removed peripheral device drivers
US8881115B2 (en) Compiling source code for debugging with expanded snapshots
US9311070B2 (en) Dynamically recommending configuration changes to an operating system image
KR101043299B1 (ko) 악성 코드 탐지 방법, 시스템 및 컴퓨터 판독 가능한 저장매체
US20130081003A1 (en) Selective data flow analysis of bounded regions of computer software applications
CN111813646B (zh) docker容器环境下注入应用探针的方法和装置
CN110457907B (zh) 一种固件程序检测方法和装置
WO2017193964A1 (zh) 一种组件升级方法、装置和系统
KR102141456B1 (ko) 자동 프로파일링이 가능한 모니터링 시스템
CN111124761B (zh) 一种设备重启方法、装置、设备及介质
CN112052088A (zh) 自适应的进程cpu资源限制方法、装置、终端及存储介质
CN108090352B (zh) 检测系统及检测方法
CN114184885A (zh) 一种故障检测方法、装置及存储介质
CN113672918A (zh) 恶意代码检测方法、装置、存储介质及电子设备
KR101593183B1 (ko) 가상환경에서의 악성코드 분석을 위한 자동 행위발현 장치 및 방법
CN116860552A (zh) 应用程序运行监测方法、装置、电子设备及存储介质
US10379561B2 (en) Energy saving method based on confidence interval and apparatus using the same
US11811803B2 (en) Method of threat detection
KR101310070B1 (ko) 프로그램간의 충돌을 예방하는 방법 및 그 방법이 기록된 기록매체
KR101371895B1 (ko) Can 패킷 자동 분석 방법
CN113505365A (zh) 权限管理方法、装置、电子设备及存储介质
CN110647419A (zh) 一种故障检测的方法、装置、计算机存储介质及终端

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant