PHP 확장 Xhprof 를 사용 하여 프로젝트 성능 분석 실천

배경
프로젝트 가 곧 출시 될 것 입 니 다.일부 도 구 를 통 해 코드 의 안정성 과 효율 을 분석 하고 싶 습 니 다.지난 팀 에서 사 용 했 던 xhprof 확장 을 생각 합 니 다.새 컴퓨터 가 바 뀌 었 기 때문에 이 확장 을 다시 컴 파일 해 야 합 니 다.현재 설치 와 실제 검사 과정 을 완전 하 게 기록 하여 자신 이 더 많은 독 자 를 돌 이 켜 보고 도 울 수 있 습 니 다.
2.조작 절차
  • 설치 확장
  • 확장 설정
  • 테스트 분석
  • 설치
    xhprof 확장 PHP 는 자체 적 으로 가지 고 있 지 않 습 니 다.필자 가 따로 설치 해 야 설치 한 후에 사용 할 수 있 습 니 다.필 자 는 소스 코드 설치 방식 을 사용 하고 설치 과정 은 다음 과 같 습 니 다.
    3.1 소스 코드 다운로드
    xhprof 는 PHP 의 PECL 공식 에서 이미 오래 되 었 습 니 다.필자 의 PHP 버 전 은 PHP 7.1 이기 때문에 GitHub 에서 xhprof 의 새로운 소스 코드 를 다운로드 해 야 합 니 다.참고 명령 은 다음 과 같 습 니 다.
    git clone https://github.com/longxinH/xhprof

    3.2 검 측 환경
    컴 파일 된 폴 더 에 들 어가 명령 을 참고 하 십시오.
    cd xhprof/extension/

    현재 필 자 는 원본 코드 를 컴 파일 해 야 합 니 다.컴 파일 하기 전에 phpze 를 사용 하여 PHP 의 환경 을 탐지 할 수 있 습 니 다.참고 명령 은 다음 과 같 습 니 다.
    phpize

    결 과 를 다음 과 같이 되 돌려 줍 니 다.
    Configuring for:
    PHP Api Version:         20160303
    Zend Module Api No:      20160303
    Zend Extension Api No:   320160303

    3.3 컴 파일 설치
    Makefile 생 성,다음 컴 파일 준비
    ./configure

    결 과 를 다음 과 같이 되 돌려 줍 니 다.
    creating libtool
    appending configuration tag "CXX" to libtool
    configure: creating ./config.status
    config.status: creating config.h
    config.status: config.h is unchanged

    컴 파일 을 시작 하고 설치 합 니 다.
    make && make install
    

    결 과 를 다음 과 같이 되 돌려 줍 니 다.
    Build complete.
    Don't forget to run 'make test'.
    
    Installing shared extensions:     /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/

    반환 정보 에서 설치 가 완료 되 었 고 확장 파일 이 저 장 된 위 치 를 볼 수 있 습 니 다.
    배치
    원본 코드 를 컴 파일 한 후에 필 자 는 PHP 의 설정 폴 더 와 xhprof 에 대해 간단 한 설정 을 해 야 합 니 다.작업 과정 은 다음 과 같 습 니 다.
    4.1 프로필 위치 찾기
    PHP 설정 을 수정 하려 면 먼저 설정 파일 이 어디 에 있 는 지 알 아야 합 니 다.여 기 는 PHP 명령 을 통 해 설정 파일 의 저장 위 치 를 볼 수 있 습 니 다.명령 은 다음 과 같 습 니 다.
    php --ini

    명령 을 실행 한 후 결 과 를 다음 과 같이 되 돌려 줍 니 다.
    Configuration File (php.ini) Path: /usr/local/etc/php/7.1
    Loaded Configuration File:         /usr/local/etc/php/7.1/php.ini
    Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
    Additional .ini files parsed:      /usr/local/etc/php/7.1/conf.d/ext-opcache.ini

    결 과 를 되 돌려 주 는 과정 에서 여러 프로필 의 경 로 를 볼 수 있 습 니 다.필 자 는 두 번 째 파일php.ini이 필요 합 니 다.
    확장 디 렉 터 리 저장 위 치 를 보 려 면 명령 을 참조 하 십시오.
    cat /usr/local/etc/php/7.1/php.ini | grep extension_dir

    결 과 를 다음 과 같이 되 돌려 줍 니 다.
    extension_dir = "/usr/local/lib/php/pecl/20160303"
    ; extension_dir = "ext"
    ; Be sure to appropriately set the extension_dir directive.
    ;sqlite3.extension_dir =

    4.2 설정 수정
    되 돌아 온 결과 확 장 된 저장 디 렉 터 리 위 치 는 다음 과 같 습 니 다.
    /usr/local/lib/php/pecl/20160303

    방금 컴 파일 된 xhprof 확장 을 이 디 렉 터 리 에 복사 해 야 합 니 다.참조 명령 은 다음 과 같 습 니 다.
    cp /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/xhprof.so  /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/

    vim 편집 기 를 통 해 프로필 을 편집 합 니 다.명령 은 다음 과 같 습 니 다.
    vim  /usr/local/etc/php/7.1/php.ini

    설정 파일 끝 에 xhprof 설정 을 추가 하고 xhprof 생 성 을 저장 할 원본 파일 을 사용자 정의 합 니 다.참고 설정 은 다음 과 같 습 니 다.
    [xhprof]
    extension=xhprof.so
    xhprof.output_dir=/data/www/xhprof/save_output_dir 

    4.3 재 부팅 적용
    저장 한 후에 필 자 는 phop-fpm 를 다시 시작 하여 설정 을 유효 하 게 합 니 다.재 부팅 명령 은 brew 명령 을 통 해 볼 수 있 습 니 다.참조 명령 은 다음 과 같 습 니 다.
    brew info [email protected]

    명령 이 실 행 된 후 돌아 오 는 정보 에서 다음 과 같은 정 보 를 볼 수 있 습 니 다.
    To have launchd start [email protected] now and restart at login:
      brew services start [email protected]
    Or, if you don't want/need a background service you can just run:
      php-fpm

    따라서 필자 가 구성 한 PHP-FPM 재 부팅 명령 은 다음 과 같다.
    brew services restart [email protected]

    재 부팅 완료 후 결 과 는 다음 과 같 습 니 다.
    Stopping `[email protected]`... (might take a while)
    ==> Successfully stopped `[email protected]` (label: [email protected])
    ==> Successfully started `[email protected]` (label: [email protected])

    4.4 검증 설치
    현재 xhprof 확장 이 설치 되 었 는 지 검증 합 니 다.참조 명령 은 다음 과 같 습 니 다.
    php -m | grep xhprof

    명령 이 실 행 된 후,설치 확장 에 성공 한 반환 결 과 는 xhprof 로 표 시 됩 니 다.아래 그림 과 같 습 니 다.
    테스트
    위의 조작 을 통 해 필 자 는 이미 성공 적 으로 설치 하고 설정 하 였 으 며,지금 은 PHP 코드 로 xhprof 의 분석 효 과 를 검증 해 야 한다.
    5.1 가상 호스트 만 들 기
    먼저 가상 호스트 를 만 들 고 사용자 가 브 라 우 저 를 통 해 접근 할 수 있 도록 합 니 다.가상 호스트 를 만 들 려 면 루트 디 렉 터 리 가 필요 하고 nginx 설정 파일 을 편집 해 야 합 니 다.구체 적 인 작업 은 다음 과 같 습 니 다.
    5.1.1 프로젝트 디 렉 터 리 만 들 기
    프로젝트 루트 디 렉 터 리 를 만 듭 니 다.명령 은 다음 과 같 습 니 다.
    mkdir -p /Users/song/mycode/work/test

    생 성 에 성공 한 후 필 자 는 이전 git 에서 내 린 일부 코드 를 프로젝트 루트 디 렉 터 리 에 복사 해 야 합 니 다.참조 명령 은 다음 과 같 습 니 다.
    cp -r xhprof/xhprof_html /Users/song/mycode/work/test/
    cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/

    5.1.2 프로필 편집
    프로필 추가,명령 참조
    /usr/local/etc/nginx/nginx.conf

    프로필 추가
        server {
            listen       80;
            server_name  test.localhost;
    
            root   /Users/song/mycode/work/test;
            index  index.html index.htm index.php;
            
            location / {
                try_files $uri $uri/ /index.php?$query_string;
            }
    
    
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
    
        }
    /etc/hosts파일 에 분석 기록 을 추가 하고 기록 내용 은 다음 과 같 습 니 다.
    127.0.0.1 test.localhost

    5.2 새 테스트 코드
    git 창고examples폴 더 에 demo 코드 가 있 습 니 다.그러나 이 코드 의 주석 은 모두 영어 이 고 조판 방식 도 필자 가 이해 하기 어렵 기 때문에 필 자 는 이 파일 을 다시 편집 하 였 습 니 다.참고 절 차 는 다음 과 같 습 니 다.
    vim 으로 새 PHP 파일 만 들 기
    vim /Users/song/mycode/work/test/test.php

    파일 에 다음 코드 를 추가 합 니 다.
    save_run($xhprof_data, "xhprof_foo");
    
    echo "
    http://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo
    ";

    코드 를 저장 한 후 브 라 우 저 를 통 해 해당 URL 주 소 를 방문 합 니 다.URL 주 소 는 다음 과 같 습 니 다.
    http://test.localhost/xhprof/test.php

    5.3 결과 분석
    실행 후 결 과 는 다음 과 같다.
    페이지 에서 URL 주 소 를 볼 수 있 습 니 다.이 URL 주 소 를 복사 하고 열 면 이 코드 의 분석 결 과 를 볼 수 있 습 니 다.아래 그림 과 같 습 니 다.
    페이지 에 하나의 목록 이 있 는데 모든 방법 이 소모 하 는 시간 을 보 여 줍 니 다.목록 의 방식 이 뚜렷 하지 않다 고 생각 되면 페이지 에 있 는View Full Callgraph링크 를 클릭 하면 그림 을 직접 생 성 할 수 있 습 니 다.아래 그림 과 같 습 니 다.
    그림 에서 집행 시간 이 모두 test 방법 에 소모 되 는 것 을 뚜렷하게 볼 수 있 기 때문에 필 자 는 이 방법 에 대해 맞 춤 형 최적화 를 할 수 있다.
    저자:탕 청송
    songboy 8888
    날짜:2018-08-27

    좋은 웹페이지 즐겨찾기