【PHP】プロジェクトの関数レベルのパフォーマンス監視の導入
作者:zhanhailiang 日期:2013-03-18
PHP 拡張機能 Xhprof を使用して、関数レベルのパフォーマンス監視を実装します。
Xhprof の公式説明を引用します:
XHProf は、PHP 用の関数レベルの階層プロファイラーであり、単純な HTML ベースのナビゲーション インターフェイスを備えており、生データ収集コンポーネントは (PHP 拡張機能として) C で実装されています。 レイヤーはすべて PHP で作成されており、関数レベルの包括的および排他的なウォールタイム、メモリ使用量、CPU 時間、および各関数の呼び出し数をレポートできます。さらに、2 つの実行を比較する機能 (階層的な DIFF レポート) もサポートしています。 、 または 複数の実行からの集計結果。ブロック時間、メモリ使用量、CPU 時間を含む呼び出し数などの関数レベルのパフォーマンス情報を提供します。1. インストールと設定
<span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software <span class="co0" style="color:rgb(128,128,128); font-style:italic"># wget http://pecl.php.net/get/xhprof-0.9.2.tgz</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software <span class="co0" style="color:rgb(128,128,128); font-style:italic"># tar zxvf xhprof-0.9.2.tgz</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software <span class="co0" style="color:rgb(128,128,128); font-style:italic"># cd xhprof-0.9.2/</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2 <span class="co0" style="color:rgb(128,128,128); font-style:italic"># ls -alp</span> 总计 <span class="nu0" style="color:rgb(204,102,204)">968</span> drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">6</span> root root <span class="nu0" style="color:rgb(204,102,204)">4096</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">18</span> 09:09 .<span class="sy0" style="color:rgb(102,204,102)">/</span> drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">47</span> root root <span class="nu0" style="color:rgb(204,102,204)">8192</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">18</span> 09:09 ..<span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="re5">-rw-r--r--</span> <span class="nu0" style="color:rgb(204,102,204)">1</span> <span class="nu0" style="color:rgb(204,102,204)">1425</span> <span class="kw2" style="color:rgb(0,0,0); font-weight:bold">users</span> <span class="nu0" style="color:rgb(204,102,204)">3359</span> <span class="nu0" style="color:rgb(204,102,204)">2009</span>-06-02 01:<span class="nu0" style="color:rgb(204,102,204)">52</span> CHANGELOG <span class="re5">-rw-r--r--</span> <span class="nu0" style="color:rgb(204,102,204)">1</span> <span class="nu0" style="color:rgb(204,102,204)">1425</span> <span class="kw2" style="color:rgb(0,0,0); font-weight:bold">users</span> <span class="nu0" style="color:rgb(204,102,204)">266</span> <span class="nu0" style="color:rgb(204,102,204)">2009</span>-06-02 01:<span class="nu0" style="color:rgb(204,102,204)">52</span> CREDITS drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">2</span> root root <span class="nu0" style="color:rgb(204,102,204)">4096</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">18</span> 09:09 examples<span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># demo</span> drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">8</span> root root <span class="nu0" style="color:rgb(204,102,204)">4096</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">18</span> 09:09 extension<span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># pecl </span> <span class="re5">-rw-r--r--</span> <span class="nu0" style="color:rgb(204,102,204)">1</span> <span class="nu0" style="color:rgb(204,102,204)">1425</span> <span class="kw2" style="color:rgb(0,0,0); font-weight:bold">users</span> <span class="nu0" style="color:rgb(204,102,204)">10174</span> <span class="nu0" style="color:rgb(204,102,204)">2009</span>-06-02 01:<span class="nu0" style="color:rgb(204,102,204)">52</span> LICENSE <span class="re5">-rw-r--r--</span> <span class="nu0" style="color:rgb(204,102,204)">1</span> <span class="nu0" style="color:rgb(204,102,204)">1425</span> <span class="kw2" style="color:rgb(0,0,0); font-weight:bold">users</span> <span class="nu0" style="color:rgb(204,102,204)">186</span> <span class="nu0" style="color:rgb(204,102,204)">2009</span>-06-02 01:<span class="nu0" style="color:rgb(204,102,204)">52</span> README <span class="re5">-rw-r--r--</span> <span class="nu0" style="color:rgb(204,102,204)">1</span> root root <span class="nu0" style="color:rgb(204,102,204)">931660</span> <span class="nu0" style="color:rgb(204,102,204)">2009</span>-06-02 01:<span class="nu0" style="color:rgb(204,102,204)">55</span> xhprof drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">6</span> root root <span class="nu0" style="color:rgb(204,102,204)">4096</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">18</span> 09:09 xhprof_html<span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># 自带的界面包</span> drwxr-xr-x <span class="nu0" style="color:rgb(204,102,204)">4</span> root root <span class="nu0" style="color:rgb(204,102,204)">4096</span> <span class="nu0" style="color:rgb(204,102,204)">2013</span>-03-<span class="nu0" style="color:rgb(204,102,204)">12</span> <span class="nu0" style="color:rgb(204,102,204)">15</span>:<span class="nu0" style="color:rgb(204,102,204)">40</span> xhprof_lib<span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># 函数库</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2 <span class="co0" style="color:rgb(128,128,128); font-style:italic"># cd extension/</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># phpize </span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># ./configure --with-php-config=/usr/local/services/php/bin/php-config --enable-xhprof</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># make</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># make install</span> Installing shared extensions: <span class="sy0" style="color:rgb(102,204,102)">/</span>usr<span class="sy0" style="color:rgb(102,204,102)">/</span>local<span class="sy0" style="color:rgb(102,204,102)">/</span>services<span class="sy0" style="color:rgb(102,204,102)">/</span>php<span class="sy0" style="color:rgb(102,204,102)">/</span>lib<span class="sy0" style="color:rgb(102,204,102)">/</span>php<span class="sy0" style="color:rgb(102,204,102)">/</span>extensions<span class="sy0" style="color:rgb(102,204,102)">/</span>no-debug-non-zts-<span class="nu0" style="color:rgb(204,102,204)">20090626</span><span class="sy0" style="color:rgb(102,204,102)">/</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># cp /usr/local/services/php/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so /usr/local/services/php/extensions/</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># 将生成的xhprof.so复制到extension_dir目录下,配置php.ini,重启php-fpm或服务器即可</span> <span class="sy0" style="color:rgb(102,204,102)">//</span> php.ini <span class="br0" style="color:rgb(102,204,102)">[</span>xhprof<span class="br0" style="color:rgb(102,204,102)">]</span> <span class="re2" style="color:rgb(0,0,255)">extension</span>=xhprof.so xhprof.output_dir=<span class="st0" style="color:rgb(255,0,0)">"/data/logs/servers/xhprof"</span> <span class="co0" style="color:rgb(128,128,128); font-style:italic"># 检查xhprof是否加载</span> <span class="sy0" style="color:rgb(102,204,102)">/</span>data<span class="sy0" style="color:rgb(102,204,102)">/</span>software<span class="sy0" style="color:rgb(102,204,102)">/</span>xhprof-0.9.2<span class="sy0" style="color:rgb(102,204,102)">/</span>extension <span class="co0" style="color:rgb(128,128,128); font-style:italic"># php -m|grep xhprof</span> xhprofログイン後にコピー2. パフォーマンス分析とロギング
まず、次のコードを追加して、リクエストの 10 分の 1 のパフォーマンス分析ログを記録します (ログは /data/logs/servers/xhprof に記録されます):
<span class="re0" style="color:rgb(0,0,255)">$xhprofEnabled</span> <span class="sy0" style="color:rgb(102,204,102)">=</span> <span class="kw4" style="color:rgb(153,51,51)">FALSE</span><span class="sy0" style="color:rgb(102,204,102)">;</span> <span class="kw1" style="color:rgb(177,177,0)">if</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="kw3" style="color:rgb(0,0,102)">extension_loaded</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="st_h">'xhprof'</span><span class="br0" style="color:rgb(102,204,102)">)</span> <span class="sy0" style="color:rgb(102,204,102)">&&</span> <span class="kw3" style="color:rgb(0,0,102)">mt_rand</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="nu0" style="color:rgb(204,102,204)">1</span><span class="sy0" style="color:rgb(102,204,102)">,</span> <span class="nu0" style="color:rgb(204,102,204)">10</span><span class="br0" style="color:rgb(102,204,102)">)</span> <span class="sy0" style="color:rgb(102,204,102)">===</span> <span class="nu0" style="color:rgb(204,102,204)">1</span><span class="br0" style="color:rgb(102,204,102)">)</span> <span class="br0" style="color:rgb(102,204,102)">{</span> <span class="co1" style="color:rgb(128,128,128); font-style:italic">// 分析十分之一的请求性能</span> <span class="co1" style="color:rgb(128,128,128); font-style:italic">// 开启性能监测</span> xhprof_enable<span class="br0" style="color:rgb(102,204,102)">(</span><span class="coMULTI" style="color:rgb(128,128,128); font-style:italic">/*XHPROF_FLAGS_CPU + */</span>XHPROF_FLAGS_MEMORY <span class="sy0" style="color:rgb(102,204,102)">+</span> XHPROF_FLAGS_NO_BUILTINS <span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span> <span class="re0" style="color:rgb(0,0,255)">$xhprofEnabled</span> <span class="sy0" style="color:rgb(102,204,102)">=</span> <span class="kw4" style="color:rgb(153,51,51)">TRUE</span><span class="sy0" style="color:rgb(102,204,102)">;</span> <span class="br0" style="color:rgb(102,204,102)">}</span>ログイン後にコピー次に、リクエスト終了時に xhprof パフォーマンス分析ログが記録されるように、リクエスト終了ハンドラーを登録します。
生成されたログは、<span class="kw2" style="color:rgb(0,0,0); font-weight:bold">function</span><span style="color:#333333"> profile_record</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="br0" style="color:rgb(102,204,102)">)</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">{</span><span style="color:#333333"> </span><span class="kw1" style="color:rgb(177,177,0)">if</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="kw3" style="color:rgb(0,0,102)">isset</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$GLOBALS</span><span class="br0" style="color:rgb(102,204,102)">[</span><span class="st_h" style="color:rgb(51,51,51)">'xhprofEnabled'</span><span class="br0" style="color:rgb(102,204,102)">]</span><span class="br0" style="color:rgb(102,204,102)">)</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">&&</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$GLOBALS</span><span class="br0" style="color:rgb(102,204,102)">[</span><span class="st_h" style="color:rgb(51,51,51)">'xhprofEnabled'</span><span class="br0" style="color:rgb(102,204,102)">]</span><span class="br0" style="color:rgb(102,204,102)">)</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">{</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$xhprof_data</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> xhprof_disable</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$path</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$_SERVER</span><span class="br0" style="color:rgb(102,204,102)">[</span><span class="st_h" style="color:rgb(51,51,51)">'PHP_SELF'</span><span class="br0" style="color:rgb(102,204,102)">]</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="kw1" style="color:rgb(177,177,0)">if</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$pos</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="kw3" style="color:rgb(0,0,102)">strpos</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$path</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="st_h" style="color:rgb(51,51,51)">'/htdocs'</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="br0" style="color:rgb(102,204,102)">)</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">{</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$path</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="kw3" style="color:rgb(0,0,102)">substr</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$path</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$pos</span><span class="sy0" style="color:rgb(102,204,102)">+</span><span class="nu0" style="color:rgb(204,102,204)">7</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">}</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$basename</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="kw3" style="color:rgb(0,0,102)">str_replace</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="kw3" style="color:rgb(0,0,102)">array</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="st_h" style="color:rgb(51,51,51)">'.'</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="st_h" style="color:rgb(51,51,51)">'/'</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="st_h" style="color:rgb(51,51,51)">'_'</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="kw3" style="color:rgb(0,0,102)">ltrim</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$path</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="st_h" style="color:rgb(51,51,51)">'/'</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="coMULTI" style="color:rgb(128,128,128); font-style:italic">/* 官方Demo,请参考下载包里的</span><span class="coMULTI" style="font-style:italic"><span style="color:#ff0000">xhprof-0.9.2/examples/sample.php</span></span><span class="coMULTI" style="color:rgb(128,128,128); font-style:italic"> * // * // Saving the XHProf run * // using the default implementation of iXHProfRuns. * // * include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; * include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; * $xhprof_runs = new XHProfRuns_Default(); */</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$xhprof_runs</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="kw2" style="color:rgb(0,0,0); font-weight:bold">new</span><span style="color:#333333"> HWSL_XhProfRuns</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="co1" style="color:rgb(128,128,128); font-style:italic">// 记录日志时引入时间截,方便比较不同版本间的性能差异</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$run_id</span><span style="color:#333333"> </span><span class="sy0" style="color:rgb(102,204,102)">=</span><span style="color:#333333"> </span><span class="re0" style="color:rgb(0,0,255)">$xhprof_runs</span><span class="sy0" style="color:rgb(102,204,102)">-></span><span class="me1" style="color:rgb(0,102,0)">save_run</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="re0" style="color:rgb(0,0,255)">$xhprof_data</span><span class="sy0" style="color:rgb(102,204,102)">,</span><span style="color:#333333"> </span><span class="st_h" style="color:rgb(51,51,51)">'xhprof_itravel_'</span><span class="sy0" style="color:rgb(102,204,102)">.</span><span class="re0" style="color:rgb(0,0,255)">$basename</span><span class="sy0" style="color:rgb(102,204,102)">.</span><span class="st_h" style="color:rgb(51,51,51)">'_'</span><span class="sy0" style="color:rgb(102,204,102)">.</span><span class="kw3" style="color:rgb(0,0,102)">date</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="st_h" style="color:rgb(51,51,51)">'YmdHis'</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">}</span><span style="color:#333333"> </span><span class="br0" style="color:rgb(102,204,102)">}</span><span style="color:#333333"> </span><span class="kw3" style="color:rgb(0,0,102)">register_shutdown_function</span><span class="br0" style="color:rgb(102,204,102)">(</span><span class="st_h" style="color:rgb(51,51,51)">'profile_record'</span><span class="br0" style="color:rgb(102,204,102)">)</span><span class="sy0" style="color:rgb(102,204,102)">;</span>ログイン後にコピーxhprof.output_dir="/data/logs/servers/xhprof" にファイルとして保存されます。
生成されるログ ファイルの命名規則は次のとおりです:名前空間
. の命名規則は次のように定義されます: 'xhprof_itravel_'.$basename.'_'.date('YmdHis')
$basename は対応するファイルの場所を記録し、date('YmdHis') は現在のタイムスタンプを記録して、同じファイルの異なるバージョン間のパフォーマンスの違いを比較します。
3. ログ分析
次に、 公式ユーザー インターフェイス パッケージ xhprof-0.9.2/xhprof_html/ を通じて実行レポートを表示します:
run_id が
にアクセスしてください。で名前空間が であるレポートを表示するには、URL: http://
/ index.php?run=&source=<名前空間> 各列の意味は次のとおりです:
包括時間 (またはサブツリー実行時間) : サブツリー実行時間を含むすべての実行時間。 排他時間/セルフ時間: 関数自体の実行にかかる時間。サブツリーの実行時間は除きます。 実時間: 経過時間または実時間とも呼ばれます。 CPU 時間: ユーザー空間の CPU 時間 + カーネル空間の CPU 時間。グラフィカルなパフォーマンス分析レポートを表示することもできます (強調表示されたパスは、関数呼び出しスタック内の最大のパフォーマンス損失パスを直感的に反映しています):
http://
/ callgraph.php?run=&source=<名前空間> 4.多読
本番環境で PHP パフォーマンス テスト ツール xhprof を使用する xhprof の使用法を改善するためのアイデア XHProf ファイル (ドラフト)このウェブサイトの声明この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。著者別の最新記事
2024-10-22 09:46:29 2024-10-13 13:53:41 2024-10-12 12:15:51 2024-10-11 22:47:31 2024-10-11 19:36:51 2024-10-11 15:50:41 2024-10-11 15:07:41 2024-10-11 14:21:21 2024-10-11 12:59:11 2024-10-11 12:17:31最新の問題function_exists() はカスタム関数を決定できません Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";から 2024-04-29 11:01:01021901Google Chromeのモバイル版を表示する方法 こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?から 2024-04-23 00:22:190102071親ウィンドウには出力がありません document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');から 2024-04-18 23:52:34011647