>  기사  >  백엔드 개발  >  PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법

PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법

不言
不言원래의
2018-08-29 10:52:261732검색

이 기사의 내용은 PHP의 Xhprof 확장 프로그램이 프로젝트의 성능을 분석하는 방법에 대한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 배경

프로젝트가 곧 온라인으로 전환됩니다. 코드의 안정성과 효율성을 분석하기 위해 몇 가지 도구를 사용하고 싶습니다. 새 컴퓨터로 변경했기 때문에 이전 팀에서 사용했던 xhprof 확장 프로그램이 기억났습니다. , 이제 이 확장 프로그램을 다시 컴파일해야 합니다. 검토를 용이하게 하고 더 많은 독자를 돕기 위해 설치 및 실제 문제 해결 프로세스를 완전히 기록해야 합니다.

2. 작업 단계

  1. 확장 프로그램 설치

  2. 확장 프로그램 구성

  3. 테스트 분석

3. 확장 프로그램 PHP는 제공되지 않으므로 별도로 설치해야 합니다. .설치 후 이를 사용하기 위해 작성자는 여기에서 소스코드 설치 방법을 사용합니다. 설치 과정은 다음과 같습니다.

3.1 소스 코드 다운로드

xhprof는 이미 PHP의 공식 PECL에서 비교적 오래된 버전입니다. .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/php@7.1/7.1.19/pecl/20160303/

반환 정보는 다음과 같습니다. 설치가 완료되었으며, 확장 파일이 저장된 위치를 알 수 있습니다.

IV. 구성

소스 코드를 컴파일하고 설치한 후 작성자는 PHP 구성 폴더와 xhprof에서도 몇 가지 간단한 구성을 수행해야 합니다. 작업 과정은 다음과 같습니다

4.1 위치를 알아보세요. 구성 파일

PHP 구성을 수정하려면 먼저 구성 파일이 어디에 있는지 알아야 합니다. 여기에서 PHP 명령을 사용하여 구성 파일의 위치를 ​​볼 수 있습니다. 참조 명령은 다음과 같습니다.

php --ini

After 명령을 실행하면 반환 결과는 다음과 같습니다

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

입니다. 확장 프로그램 디렉터리 저장 위치는 명령어를 참조하세요. 반환된 결과는 다음과 같습니다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/php@7.1/7.1.19/pecl/20160303/xhprof.so  /usr/local/Cellar/php@7.1/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 重启生效

保存好之后,笔者重启php-fpm让其配置生效,重启命令可以通过brew命令来查看,参考命令如下:

brew info php@7.1

在命令执行后,返回的信息中可以看到如下信息

To have launchd start php@7.1 now and restart at login:
  brew services start php@7.1
Or, if you don't want/need a background service you can just run:
  php-fpm

因此笔者构造的重启PHP-FPM命令如下:

brew services restart php@7.1

重启完成后,返回结果如下

Stopping `php@7.1`... (might take a while)
==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1)
==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1)

4.4 验证安装

现在验证xhprof扩展是否已经安装完成,参考命令如下

php -m | grep xhprof

命令执行后,安装扩展成功的返回结果将会显示xhprof,如下图所示

PHP의 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

vim /Users/song/mycode/work/test/test.php
반환된 결과는 다음과 같습니다

<?php //加载所需文件
include_once "./xhprof_lib/utils/xhprof_lib.php";
include_once "./xhprof_lib/utils/xhprof_runs.php";

//随意定义一个函数
function test($max)
{
    for ($idx = 0; $idx < $max; $idx++) {
        echo &#39;&#39;;
    }
}

//定义测试方法
function a()
{
    test(rand(1000,5000));
}

//开始分析
xhprof_enable();

//需要分析的函数
a();

//结束分析
$xhprof_data = xhprof_disable();
//实例化xhprof类
$xhprof_runs = new XHProfRuns_Default();
//获取当前当前页面分析结果
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "\nhttp://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n";
4.2 구성 수정

반환된 결과를 보면 확장 프로그램의 저장 디렉터리 위치는 다음과 같습니다. Follows

http://test.localhost/xhprof/test.php
이제 방금 컴파일한 xhprof 확장자를 디렉터리에 복사해야 합니다. 다음 명령을 참조하세요. 다음과 같이

rrreee

vim 편집기를 통해 구성 파일을 편집합니다. 참조 명령은 다음과 같습니다

rrreee

xhprof 구성 추가 구성 파일의 끝 부분에 xhprof에서 생성된 소스 파일을 사용자 정의하여 다음과 같이 참조 구성을 저장합니다

rrreee4.3 다시 시작하여 적용합니다PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법 저장 후 작성자는 구성을 적용하기 위해 php-fpm을 다시 시작했습니다. restart 명령은 Brew 명령을 통해 볼 수 있습니다. 참조 명령은 다음과 같습니다.

rrreee

명령이 실행된 후 반환되는 정보에서 다음 정보를 볼 수 있습니다

rrreee🎜그래서 작성자가 구성한 restart PHP-FPM 명령은 다음과 같습니다. 🎜rrreee🎜다시 시작이 완료된 후 반환 결과는 다음과 같습니다🎜rrreee🎜4.4 설치 확인🎜🎜이제 xhprof 확장이 설치되었는지 확인하면 참조 명령은 다음과 같습니다🎜rrreee🎜명령 후 실행되면 확장 프로그램이 성공적으로 설치되었습니다. 결과는 아래와 같이 xhprof로 표시됩니다🎜🎜🎜🎜🎜🎜🎜🎜 5. 테스트🎜🎜 위 작업을 마친 후 작성자는 성공적으로 설치 및 구성을 완료했으며 이제 PHP를 사용해야 합니다. xhprof의 분석 효과를 검증하는 코드🎜🎜5.1 가상 호스트 생성 🎜🎜먼저 사용자가 브라우저를 통해 접속할 수 있도록 가상 호스트를 생성해야 합니다. 가상 호스트를 생성하려면 루트 디렉터리가 있어야 하고 nginx 구성 파일을 편집해야 합니다. 🎜

5.1.1 프로젝트 디렉토리 생성 h4>🎜프로젝트 루트 디렉토리를 생성합니다. 참조 명령은 다음과 같습니다🎜rrreee🎜생성이 성공한 후 작성자는 일부를 복사해야 합니다. git에서 프로젝트 루트 디렉토리로 가져온 코드 중 참조 명령은 다음과 같습니다🎜rrreee

5.1.2 구성 파일 편집🎜구성 파일 추가, 명령 참조🎜rrreee🎜구성 파일 추가 🎜rrreee🎜/etc/hosts 파일에 파싱 기록 한 줄을 추가하면 기록 내용은 다음과 같습니다.🎜rrreee🎜5.2 새로운 테스트 코드 생성🎜🎜이미 데모 코드가 있습니다 git 저장소의 examples 폴더에 있습니다. 그런데 이 코드의 주석은 모두 영어로 되어 있고, 포맷 방법도 작성자가 이해하기 쉽지 않아서 다시 수정했습니다. 이 파일은 다음 단계를 참조하세요. vim을 사용하여 새 PHP 파일을 생성하세요🎜rrreee🎜파일에 다음 코드를 추가하세요🎜rrreee🎜코드를 저장한 후 브라우저를 통해 해당 URL 주소에 접속하면 URL 주소는 다음과 같습니다. 🎜rrreee🎜5.3 결과 분석🎜🎜실행 후 결과는 아래와 같습니다🎜🎜🎜🎜🎜🎜🎜해당 URL 주소를 복사해서 열어보시면 이 코드의 분석 결과를 보실 수 있습니다. , 아래 사진과 같이🎜

PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법

페이지에 각 방법에 소요되는 시간을 보여주는 목록이 있습니다. 목록이 충분히 명확하지 않다고 생각되면 페이지의 View Full Callgraph 링크를 클릭하여 그림과 같이 직접 그림을 생성하세요. 아래 그림

PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법

테스트 방법에서 실행 시간이 소모되는 것을 그림에서 확실히 볼 수 있으므로 작성자는 이 방법에 대한 타겟 최적화를 수행할 수 있습니다.

관련 권장사항:

php 성능 모니터링 확장 xhprof

웹 성능 ​​분석을 위해 xhprof(PHP) 확장 사용

위 내용은 PHP의 Xhprof 확장이 프로젝트 성능을 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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