>  기사  >  백엔드 개발  >  xdebug를 사용하여 PHP 프로그램을 분석하고 성능 병목 현상을 찾습니다.

xdebug를 사용하여 PHP 프로그램을 분석하고 성능 병목 현상을 찾습니다.

伊谢尔伦
伊谢尔伦원래의
2016-11-26 14:33:401936검색

프로그래밍에서도 인용되는 경제학의 유명한 80-20 법칙이 있습니다. 성능 병목 현상의 80%는 코드의 20%에서 발생합니다. PHP의 XDebug 확장을 사용하면 이러한 20%의 코드를 효과적으로 찾을 수 있습니다.

1. 설치 및 구성

1. http://xdebug.org/

에서 PHP용 XDebug 확장을 다운로드합니다.

2. 🎜 >
tar -xzf xdebug-2.0.0RC3.gz
cd xdebug-2.0.0RC3
/usr/local/php/bin/phpize
./configure --enable-xdebug
cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/

참고: /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/다른 PHP 버전은 경로가 다르므로 이 경로에 배치할 필요가 없습니다. zend_extension_ts에서 xdebug.so의 위치를 ​​지정할 수 있습니다.

vi /usr/local/php/lib/php.ini

php.ini를 수정하고, PHP 가속 모듈을 제거하고, XDebug 확장을 지원하도록 다음 구성 정보를 추가합니다.

[Xdebug]
zend_extension_ts="/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so"
xdebug.profiler_enable=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name="script"
mkdir -p /tmp/xdebug
chmod 755 /tmp/xdebug
chown www:www /tmp/xdebug
/usr/local/apache/bin/apachectl -k restart

3. 클라이언트(Windows): WinCacheGrind 다운로드 주소: http:/ /sourceforge.net/projects/wincachegrind/

2. 분석 과정

1. 홈페이지에 있는 다양한 링크를 여러 번 클릭하면 / tmp/xdebug 디렉터리 다음 파일:

usr_local_apache_htdocs_app_checknum_chknum_php_cachegrind.out
usr_local_apache_htdocs_app_login_showHeaderLogin_php_cachegrind.out
usr_local_apache_htdocs_app_play_play_php_cachegrind.out
usr_local_apache_htdocs_app_user_member_php_cachegrind.out
usr_local_apache_htdocs_tag_tags_php_cachegrind.out
usr_local_apache_htdocs_top_top_php_cachegrind.out

2. 위 파일을 Windows에 복사하고 클라이언트 소프트웨어 WinCacheGrind를 사용하여 각 파일을 열면 다음 PHP 프로그램이 실행하는 데 가장 오랜 시간이 걸리는 것으로 나타났습니다. :

/usr/local/apache/htdocs/tag/tags.php      耗时840ms

3. 분석결과 :

1./usr/local/apache/htdocs/tag/tags.php

xdebug를 사용하여 PHP 프로그램을 분석하고 성능 병목 현상을 찾습니다.

(1) 시간 소모 가장 긴 filter_tags 함수는 /usr/local/apache/htdocs/tag/tags.php의 158행에 나타납니다.

$tags .= filter_tags($videos[$i]['tags'])." ";

(2) filter_tags 함수는 /에서 인용됩니다. usr/local/apache/htdocs /include/misc.php, getForbiddenTags 함수는 filter_tags 함수에 의해 21번 호출됩니다. filter_tags 함수에 소요되는 대부분의 시간은 getForbiddenTags 함수에 의해 발생합니다. getForbiddenTags 함수의 내용은 다음과 같습니다.

function getForbiddenTags()
{
    $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt";
    if(file_exists($tagsPath))
    {
        $fp = fopen($tagsPath, "r");
        $arrconf = array ();
        if ($fp) 
        {
            while (!feof($fp)) 
            {
                $line = fgets($fp, 1024);
                $line = trim($line);
                $rows = explode("#", $line);
                $coumns = explode("=", trim($rows[0]));
                if(""!=trim($coumns[0]))
                {
                     $arrconf[trim($coumns[0])] = trim($coumns[1]);
                }
            }
        }
        return $arrconf;
    }
}

(3) getForbiddenTags 함수를 분석해 보면 PHP 함수 Trim이 16827번 호출된 것으로 나타났습니다.

xdebug를 사용하여 PHP 프로그램을 분석하고 성능 병목 현상을 찾습니다.

(4) 병목 현상의 가능한 원인:

필터링할 156개의 키워드는 /usr/local/apache/template에 한 줄씩 저장됩니다. /tags/forbidden_tags.txt 파일에서 텍스트 데이터베이스가 효율적이지 않습니다.

줄 단위 읽기 기능인 fgets와 문자열의 양쪽 공백이나 지정된 문자를 제거하는 기능인 Trim은 부하가 높은 경우 비효율적입니다. fopen, fread, 그리고 fscanf를 비교해보세요.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.