遅かれ早かれ、私たちはそれぞれレガシーコードとその最適化に直面します。 このような状況でのデバッガーとプロファイラーは、プログラマーにとって最高のアシスタントです。 Derick Rethans(Derick Rethans)のおかげでPHPを使用する人には、xDebugという優れたツールがあります。 RuNetにもxDebugに関する多くの情報があるので、この記事の議論は彼に関するものではありません。
PHPのプロファイラーの言及につまずいたので、すぐにxDebugについて考えました(Zendのプロプライエタリツールを長い間忘れていました)が、今回は間違っていました-XHProfについてお話します。
XHProf
このプロファイラーはFacebook用に特別に開発され、そのソースコードは2009年3月に公開されました。
インストールは迅速かつスムーズでした。
 wget pecl.php.net/get/xhprof-0.9.2.tgz 
      
        
        
        
      
     tar xvf xhprof-0.9.2.tgz 
      
        
        
        
      
     cd xhprof-0.9.2/extension/ 
      
        
        
        
      
     phpize 
      
        
        
        
      
     ./configure && make && make install 
      
        
        
        
      
     cd /usr/local/etc/php.d/ 
      
        
        
        
      
     vim xhprof.ini 
      
        
        
        
      
     cd /usr/local/ 
      
        
        
        
      
     vim header.php 
      
        
        
        
      
     vim footer.php 
      
        
        
        
      
     vim etc/php.ini 
      
        
        
        
      
     /etc/init.d/php-fpm restart 
      
        
        
        
      
     cp vhost.conf.template prof.my.conf 
      
        
        
        
      
     sed -is/site/prof/ prof.my.conf 
      
        
        
        
      
     vim prof.my.conf 
      
        
        
        
      
     /etc/init.d/nginx restart
      
      上記の設定を分析しましょう
xhprof.ini
[xhprof] 
      
        
        
        
      
     extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so 
      
        
        
        
      
     xhprof.output_dir="/home/max/www/profile/"
      
      php.iniに2行追加しましたが、その説明は以下で説明します
auto_prepend_file = /usr/local/header.php 
      
        
        
        
      
     auto_append_file = /usr/local/footer.php
      
      prof.my.conf-Nginx構成が最も標準です。
server { 
      
        
        
        
      
     listen 80; 
      
        
        
        
      
     server_name prof.my; 
      
        
        
        
      
     charset utf8; 
      
        
        
        
      
     
      
        
        
        
      
     root /usr/local/src/xhprof-0.9.2/xhprof_html ; 
      
        
        
        
      
     location / { 
      
        
        
        
      
     index index.php; 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     location ~ \.php$ { 
      
        
        
        
      
     fastcgi_pass 127.0.0.1:12000; 
      
        
        
        
      
     fastcgi_index index.php; 
      
        
        
        
      
     fastcgi_param SCRIPT_FILENAME /usr/local/src/xhprof-0.9.2/xhprof_html/$fastcgi_script_name; 
      
        
        
        
      
     include fastcgi_params; 
      
        
        
        
      
     
      
        
        
        
      
     } 
      
        
        
        
      
     } 
      
        
        
        
      
    
      
      /usr/local/src/xhprof-0.9.2/xhprof_htmlには、プロファイラーに対して適切なWEBGUIを作成するPHPソースがあります。
したがって、2つのメインファイルについて:
header.php
<?php 
      
        
        
        
      
     if(isset($_COOKIE['xhprof'])){ 
      
        
        
        
      
     
      
        
        
        
      
     if (extension_loaded('xhprof')) { 
      
        
        
        
      
     include_once '/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php'; 
      
        
        
        
      
     include_once '/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php'; 
      
        
        
        
      
     xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 
      
        
        
        
      
     } 
      
        
        
        
      
     }
      
      footer.php
<?php 
      
        
        
        
      
     if(isset($_COOKIE['xhprof'])){ 
      
        
        
        
      
     if (extension_loaded('xhprof')) { 
      
        
        
        
      
     $profiler_namespace = 'myapp'; // namespace for your application 
      
        
        
        
      
     $xhprof_data = xhprof_disable(); 
      
        
        
        
      
     $xhprof_runs = new XHProfRuns_Default(); 
      
        
        
        
      
     $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace); 
      
        
        
        
      
     
      
        
        
        
      
     // url to the XHProf UI libraries (change the host name and path) 
      
        
        
        
      
     $profiler_url = sprintf('http://prof.my/index.php?run=%s&source=%s', $run_id, $profiler_namespace); 
      
        
        
        
      
     echo <<<OUT 
      
        
        
        
      
     Profiler output 
      
        
        
        
      
     OUT; 
      
        
        
        
      
     } 
      
        
        
        
      
     }
      
      ここで、Web経由でPHPスクリプトを起動し、左上隅にプロファイラー出力へのリンクを確認します-これがprof.myホストの作成目的です
注意してください-私はCOOKIE検証を使用しています! このチェックにより、プロダクションサーバーでプロファイラーを安全に使用できます(実際のデータと実際の負荷)。
プロファイラーのWebインターフェースには、各機能に関する情報が記載されたプレートが表示され、次の情報が報告されます。
- 各関数の呼び出し回数
 - ウォールタイム、機能の実行に費やした時間(ソケット、ファイルシステムなどからの応答の待機を含む)。
 - CPU時間、関数の実行に費やした時間(ソケット、ファイルシステムなどからの応答の待機を除く)。
 - メモリ使用量
 - ピークメモリ使用量
 
パラメータのいずれかでテーブルをソートすることが可能です
各機能に関する情報は、InclusiveとExclusiveの2つのタイプに分けられます。 Inclusiveには、子呼び出しで使用される番号が含まれますが、Exclusiveには含まれません。 また、関数の名前をクリックすると、その関数と、それが呼び出された関数と呼び出された関数に関する情報のみを表示する可能性もあります。
GraphVizがシステムにインストールされている場合、プロファイラーは呼び出しグラフを描画します。
PS伝統を破ることなく:これはハブに関する私の最初の投稿です
UPD:PHPに再投稿されました。