Profiling
Profiling이란 소프트웨어의 성능을 측정하는 방법론으로 주로 실행 속도와 메모리 사용률을 평가해서 보다 가볍고 빠른 프로그램을 만드는데 기여하는 활동을 의미한다.
동작방법
Profiling을 실행하기 위해서는 PHP의 설정을 변경해야 한다. xdebug.ini 파일을 아래와 같이 수정한다.
zend_extension=/usr/lib/php5/20100525/xdebug.so xdebug.profiler_enable=1; xdebug.profiler_output_dir=/tmp
웹페이지에 접속 한 후에 /tmp 디렉토리를 살펴보자. 아래와 같이 cachegrind.out 으로 시작하는 파일이 있다면 프로파일링 설정에 성공한 것이다. 이 파일에 프로파일링을 위한 정보가 담겨있다.
profiler
프로파일러는 프로파일링 정보를 분석해서 병목이나 메모리 누수를 찾아내는데 도움을 주는 도구를 의미한다. 하위 수업을 통해서 프로파일러에 대해서 알아보겠다.
선택적으로 프로파일링하기
모든 스크립트에 대해서 프로파일링을 하는 것은 자원의 낭비가 될 수 있다. xdebug는 프로파일링 선택적으로 프로파일링을 할 수 있는 방법을 제공한다. 이에 대한 자세한 내용은 Xdebug 선택적 실행을 참조한다.
Load Tester
로드 테스터란 시스템에 걸리는 부하를 측정하는 도구다. 프로파일링이 시스템의 내부적인 메커니즘을 분석함을 통해서 성능을 향상시킨다면 로드 테스터는 그 시스템이 얼마나 많은 실행을 처리하는가를 측정하는 것이다. 프로파일링이 원인을 찾는 것이라면 로드 테스트는 결과를 찾는 것이라고 할 수 있다. 생활코딩에 NHN에서 만든 로드 테스트 도구인 nGrinder에 대한 수업이 준비되어 있다. 이것을 참고하자. nGrinder 수업 바로가기
시스템의 성능을 향상시키는 방법
Cache
프로파일링은 단지 분석일 뿐이다. 분석을 기반으로 성능을 향상시키는 실제 작업은 별개의 지식과 노하우를 필요로 한다. 성능 향상을 위한 다양한 노하우들이 있지만 그 중에 대표적인 것이 캐쉬(cache)다. 캐쉬는 연산작업의 결과를 저장했다가 동일작업을 호출할 때 저장된 결과를 반환하는 방법으로 성능향상의 핵심이라고 할 수 있다. 아래 링크는 캐슁에 대한 수업들이다.
코드 최적화
PHP는 개발편의성이 높지만, C나 Java와 같은 언어에 비해서 느리다. 이것은 인터프리터라는 방식의 언어가 가진 숙명이지만 이것을 극복하거나 완화시킬 수 있는 몇몇 솔루션들이 있다. 아래는 이런 기술들에 대한 레퍼런스다.
비동기작업 (배치작업)
에플리케이션의 작업 중에는 실시간으로 처리해야 하는 것이 있고, 실시간으로 꼭처리 하지 않아도 되는 것이 있다. 대표적인 것이 통계작업이다. 사용자가 어떤 데이터를 입력했을 때 그 순간 그 작업을 처리하는 것이 아니라 처리해야 할 작업의 내역만을 저장했다가 실제 작업은 시스템이 한가한 시간에 하거나, 다른 컴퓨터에서 작업을 처리하는 기법이다. cron은 설정된 스케줄에 따라서 작업을 수행하는 프로그램인데, 이것을 이용해서 실시간으로 처리하지 않아도 되는 작업을 일괄적으로 처리할 수 있다.