Introduction
1 배경
PHP의 xhprof 확장 Facebook은 더 이상 업데이트 및 유지 관리되지 않습니다. Faceboo는 HHVM을 완전히 사용하고 더 이상 PHP zend 엔진을 사용하지 않기 때문입니다.
xhprof는 새 버전의 PHP(PHP7)를 지원하지 않습니다.
tideways는 UI 서비스에 대해서만 비용을 청구합니다. 실제로 xhgui는 일상적인 요구 사항을 완벽하게 충족할 수 있습니다.
Tideways는 PHP 성능을 테스트하는 데 사용되는 확장 프로그램입니다. PHP 실행 전 과정에서 호출되는 함수, 함수 호출 횟수, 실행 시간, CPU 시간, 메모리 사용량, 메모리 피크 값, 총 실행 시간, 총 CPU 시간, 총 메모리 사용량, 총 메모리 피크 값을 얻을 수 있습니다. 위의 데이터를 통해 PHP의 성능 병목 현상을 파악하고, PHP 실행 과정을 분석하는 등의 데이터를 분석할 수 있습니다.
3 장점tideways는 xhgui와 결합된 PHP 확장이므로 코드를 모니터링하기 위해 PHP 코드에 코드를 묻어둘 필요가 없습니다.
비록 비침해적이므로 각 인터페이스 로그에 대해 실행이 생성되면 CPU 및 메모리 소비를 무시할 수 없습니다.
5 구현 원칙tideways 확장 프로그램은 실행 로그 생성을 담당합니다.
다음으로 두 가지 애플리케이션 방법을 소개합니다: Intrusive
및Non-intrusive Intrusive는 코드에 코드를 추가하는 것을 의미하고 Intrusive는 기본 UI를 사용합니다. 침입적이란 코드를 변경하지 않고 nginx/apache를 변경하여 코드 삽입이 이루어짐을 의미합니다. intrusive:
git clone "https://github.com/tideways/php-xhprof-extension.git" cd php-xhprof-extension phpize ./configure --with-php-config=/usr/local/php7/bin/php-config make sudo make install여기서 생성된 .xhprof 파일은 tmp 디렉터리에 있으며 기본 UI도 tmp 디렉터리에서 .xhprof 파일을 검색합니다.
데이터를 찾으려면 기본 UI를 설치하세요
<?php tideways_xhprof_enable(); // your application code $data = tideways_xhprof_disable(); file_put_contents( sys_get_temp_dir() . "/" . uniqid() . ".yourapp.xhprof", serialize($data) ); // $data = tideways_xhprof_disable(); // file_put_contents( // sys_get_temp_dir() . "/" . date('His', time()) . ".material.xhprof", // serialize($data) // );
이 저장소에서 추적 목록을 확인하세요. 함수 호출 메모를 보려면 Callgraph를 설치해야 합니다
Install Callgraph
Callgraph는 실제로 세 가지 도구로 구성됩니다. 하나는 C 함수 호출 트리를 생성하는 데 사용되는 cflow 또는 calltree입니다. 다음은 주로 cflow를 소개합니다.
graphviz로 강화된 도트 텍스트 그래픽 언어 처리 도구입니다. xhprof_lib
和xhprof_html
目录安装到您的Web文件夹中,并导航xhprof_html/index.php
git clone git@github.com:phacility/xhprof.git다음으로 기본적으로 /usr/local/bin에 설치되는 tree2dotx와 Callgraph를 설치합니다.
sudo apt-get install cflow graphviz다음 두 렌더링이 표시됩니다.
침투적: xhgui를 침입적으로 사용하려면 xhgui
를 설치하려면 mongodb
가 필요합니다. reee
Nginx 구성
wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph sudo cp tree2dotx callgraph /usr/local/bin sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}여기서 의미하는 바는 프로젝트 PHP 코드를 실행하기 전에 header.php를 실행하여 비침해적 탐지 성능의 목적을 달성한다는 것입니다
xhgui 구성(로그 생성 빈도)
xhgui의 구성에서 /config.default.php에서 샘플링 히트 수를 설정할 수 있습니다return rand(1, 100) === 42; 为1%的采样率,改成return True;则标识每次都采样
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return True; }else{ // 1%采样 return rand(1, 100) === 42; } }
mongodb的配置
xhgui/config/config.default.php
// Can be either mongodb or file. /* 'save.handler' => 'file', 'save.handler.filename' => dirname(__DIR__) . '/cache/' . 'xhgui.data.' . microtime(true) . '_' . substr(md5($url), 0, 6), */ 'save.handler' => 'mongodb', // Needed for file save handler. Beware of file locking. You can adujst this file path // to reduce locking problems (eg uniqid, time ...) //'save.handler.filename' => __DIR__.'/../data/xhgui_'.date('Ymd').'.dat', 'db.host' => 'mongodb://127.0.0.1:27017', 'db.db' => 'xhprof',
mongo > use xhprof > db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } ) > db.results.ensureIndex( { 'profile.main().wt' : -1 } ) > db.results.ensureIndex( { 'profile.main().mu' : -1 } ) > db.results.ensureIndex( { 'profile.main().cpu' : -1 } ) > db.results.ensureIndex( { 'meta.url' : 1 } )
最后展示几张xhgui的效果图
相关学习推荐:PHP编程从入门到精通
위 내용은 xhprof를 사용하여 php7에서 PHP 성능을 테스트하는 방법은 무엇입니까? (방법 소개)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!